• ベストアンサー

ATLとSTLの違いは何でしょうか?

ATLとSTLの違いは何でしょうか? STLでもリスト構造(線形リスト、[双方向リスト]) #include <list>があるみたいですが・・・ STLはC++の標準テンプレートライブラリ(そのまま)と理解しています。 あと、ActiveXとALTの違いも知りたいです。 極論しますが、ActiveXとはOCXを作ることでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • iyomante
  • ベストアンサー率60% (14/23)
回答No.1

ざっくりとですが ATL(Active Template Library)=ActiveXを作成するためのライブラリ STL(Standard Template Library)=C++言語におけるOS依存しない標準ライブラリ >極論しますが、ActiveXとはOCXを作ることでしょうか? はいその通りです。 WIndowsのコンポーネント技術が VBX→OCX→ActiveX という順に進化したので、事実上同じです。 従来のOCXはローカル環境のみだったのが、 WEB対応してActiveXと名称を変えました。 このActiveX(OCX)を作成するときにMFCかATLを使います。 ATLの方がActiveXのために作られた特化したライブラリです。 リスト構造とかは汎用クラス群として、様々なライブラリに含まれているのだと思います。 MFCにもリストはあります。 その汎用クラス群のみについて、個々のライブラリがバラバラに持つのではなく、 統一化しようとして作られたのがSTLです。

関連するQ&A

  • STL使用時のデバッグ設定

    現在C++を使いプログラミングをしています Microsoft Visual Studio 2005を使っているのですが SLTを使用した場合ランタイムライブラリの設定を マルチスレッドデバッグ→マルチスレッドに変更すると エラーが出ることがわかりました。 原因を調べているとSTLを使っているとエラーが出ることまで分かりました。 エラーが出るコードは #include <stdio.h> #include <LIST> using std::list; int main() { list<int> ilist; ilist.push_back(1); return 0; } warning LNK4098: defaultlib 'LIBCMT' は 他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 の警告と共に、 未解決の外部シンボル~が参照されました。 とエラーがでます できればMTでコンパイルが通るようにしたいのですが、良い方法ないでしょうか?

  • STLを使ったデータ定義を添削ください

    C++の設計は初めてです。以下のデータをC++のSTLを使って表そうしているのですが、添削をお願いします。 STLを使えるだけ使った方が開発効率が上がるかと思い、使っています。このデータにSTLなんぞ使う必要もなければ、ご指摘いただきたく、よろしくお願いします。 (1)2次元のテーブルデータを含む構造体  この構造体を使用する時は、等間隔のテーブルデータを線形補間します。与えられたxの前後のx座標を計算し、計算したx座標からy座標を取得します。 struct measurement{  char* dat_name; // データ名称  int detect_id; // 測定器ID  double start_x; // x座標開始点  double bin_width; // x座標ステップ幅  std::map<double, double> measurement; // map<x座標,y座標> }; (2)可変の大きさの構造体(表現方法にあまり自信ありません) vector <measurement> measurement_list;

  • テンプレートクラスとSTLを利用したMyListクラス

    こんにちは。STLのリストを使い自分だけのMyListクラスを作ろうとしたのですが、コンパイルできません。 エラーメッセージは警告 std::list<T>::iterator' : 依存名は型ではありません。 とでます。 ご教授お願いします。 #include<list> #include<iterator> template <class T> class CMyList { public: CMyList(); //virtual ~CMyList(); //bool HasNext(); //T Next(); //void Pushback( T t ); //void EraseCheck(); //T GetFirst(); private: std::list< T > m_List; std::list< T >::iterator m_It;//コンパイルエラー }; template <class T> CMyList<T>::CMyList() { m_List.clear(); std::list< T > ::iterator it = m_List.begin();//こう宣言する分にはOK m_It = m_List.begin(); } int main() { CMyList<int> m_List; return 0; }

  • VB6.0 ExeとDllの違い

    いつもお世話になっております。 今更ながらなのですがVB6.0について質問させて下さい。 新規でVB6.0を起動すると、「標準Exe」・「ActiveXExe」・「ActiveXDll」・「ActiveXコントロール」等がでてきますよね? 普段アプリを開発する時は「標準Exe」しか使用しないのですが、「ActiveXExe」・「ActiveXDll」・「ActiveXコントロール」の違いは何なのでしょうか?(どういうときに使い分けるのでしょうか?) ActiveXDll・・・ソースコードのみ?参照設定する?(クラスやモジュールと何が違うのでしょうか?) ActiveXコントロール・・・独自のコンポーネント(部品)を作る?(OCXのようなものでしょうか?) ActiveXExe・・・(一番分かりません) どなたかご教示お願いします。

  • データ構造について

    情報処理技術者試験の過去問で、データ構造について適切な記述を選ぶ問題がありました。回答を見てもいまいちピンときません。 <回答> ※線形リストは、データ部と次のデータの格納先を指すポインタ部から構成されるデータ構造である。 私の持っている本では、 線形リスト:データが順序良く並んできる。配列のこと。 単方向リスト:次のデータのポイントだけを持つ 双方向リスト:前と次のデータへのポインタをもつ 環状リスト:データが環状に連結されている となっています。線形リストにポインタという概念はないってことですよね?なぜ、※の記述が正しいのでしょうか。 わかる方、教えてください。よろしくお願いします。

  • ソフト移植(ヘッダーファイルとライブラリの違い)

    hファイルとLibファイルの違いがよくわかりません libでリンクしてhファイルを指定してCで命令を与える そこで問題なんですが 1.libファイルは作成できるんですか? 2.それともhファイルを書き換えるのが主流ですか? 3.学校でWEBカメラ移植の実験をしています #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <sys/ioctl.h> #include <stdlib.h> #include <linux/videodev.h> そこで上のライブラリ(.h file)をそのまま使って別のマイコンに移植しようという実験をしているのですがgcc(video4Linux)のライブラリ(.h file)抽出の仕方がよくわかりません すでにカメラのプログラムはあり、後はそのマイコンにライブラリをリンクすれば完成できるという設計構造なのですが、ソフト開発移植にあたって、この開発構造の概念であっているでしょうか? ライブラリを抽出する上で何か適切なアドバイスとかないでしょうか? *ちなみにマイコンのコンパイラーは自作です お願いします

  • C++STLについての質問です。

    C++STLについての質問です。 Visual C++ 2008 Express Edition を使用してDirectXアプリケーションを 作成しています。 その折、std::listテンプレートを使用する機会があったのですが、このリストを 使用しますと、 リンクしています... LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 fatal error LNK1120: 外部参照 3 が未解決です。 とのエラーが吐かれます。 ネットで検索すると、ソリューション構成をDebugからReleaseにすれば良いとの記述が ありましたので、実行してみました。しかし、 リンクしています... error LNK2001: 外部シンボル "_D3DXCreateTextureFromFileExW@56" は未解決です。 error LNK2001: 外部シンボル "_D3DXCreateSprite@8" は未解決です。 error LNK2001: 外部シンボル "_D3DXGetImageInfoFromFileW@8" は未解決です。 error LNK2001: 外部シンボル "_Direct3DCreate9@4" は未解決です。 fatal error LNK1120: 外部参照 4 が未解決です とのエラーが吐かれてしまいました。 尚、コード生成モードは、マルチスレッド(/MT)で作成しています。 どなたか、この問題を解決する方法をご存知ないでしょうか? よろしくお願いします。

  • C++ヘッダの肥大化

    最近、テンプレートクラスとインライン関数を多用しているため、ヘッダファイルの肥大化が気になります。 ヘッダが肥大化するとコンパイル時間も大きくなり、更にヘッダファイルの可読性も落ちてしまうと思います。 また、ライブラリ化するときはコードを隠蔽したいのですが、ほとんどがヘッダファイルに実体があるため隠蔽できません。 インライン関数やテンプレートクラス、テンプレート関数は必ずヘッダファイルに書く必要があるのでしょうか。 標準ヘッダファイルでは「*.cc」という実体コードをインクルードしているので、それに習うべきなのでしょうか。

  • 2分木と双方向線形リストを同時に実現する方法

    ファイルに書かれている文字列を読み込み, (1)ソートしてファイル出力 (2)読み込んだ順と逆順にファイル出力 というプログラムを作成する場合, (1)は2分木のデータ構造を用いて実現したのですが,2分木のデータ構造をそのまま利用することで逆順に出力させることは可能でしょうか? 私は無理だと思うので,2分木に加えて双方向の線形リストになるようにポインタを設定する必要があると考えているのですが,もっと上手く実現するアルゴリズムはあるでしょうか? アドバイスを頂けるとありがたいです.

  • boost::serializationについて

    次のコードがテンプレート辺りでコンパイルできません #include <list> #include <array> #include <fstream> #include <boost/serialization/serialization.hpp> #include <boost/serialization/array.hpp> #include <boost/serialization/list.hpp> #include <boost/archive/binary_iarchive.hpp> #include <boost/archive/binary_oarchive.hpp> std::list<std::array<bool, 3>> lab; std::array<bool, 3> pusharray; pusharray[0] = true; pusharray[1] = false; pusharray[2] = true; lab.push_back(pusharray); lab.push_back(pusharray); std::ofstream ofs("test"); boost::archive::binary_oarchive boa(ofs); boa << lab; ofs.close(); std::ifstream ifs("test"); boost::archive::binary_iarchive bia(ifs); bia >> lab; ifs.close(); エラーメッセージ: c:\program files\microsoft visual studio 10.0\vc\include\boost\archive\basic_binary_iprimitive.hpp(181): warning C4244: '引数' : 'std::streamsize' から 'size_t' への変換です。データが失われる可能性があります。 c:\program files\microsoft visual studio 10.0\vc\include\boost\archive\basic_binary_iprimitive.hpp(152): クラス テンプレート のメンバー関数 'void boost::archive::basic_binary_iprimitive<Archive,Elem,Tr>::load_binary(void *,size_t)' のコンパイル中 with [ Archive=boost::archive::naked_binary_iarchive, Elem=char, Tr=std::char_traits<char> ] c:\program files\microsoft visual studio 10.0\vc\include\boost\archive\detail\iserializer.hpp(362) : コンパイルされたクラスの テンプレート のインスタンス化 'void boost::archive::load_access::load_primitive<Archive,T>(Archive &,T &)' の参照を確認してください with [ Archive=boost::archive::naked_binary_iarchive, T=boost::archive::object_id_type ] (略) そもそもSTLコンテナのネストはserializeできないのでしょうか それともヘッダが足りないのでしょうか

専門家に質問してみよう