コンポーネントを含むベクトルをパラメータとして使用するテンプレートクラス(コンポーネントライブラリ)を宣言するにはどうすればよいですか? ここで、一例として、コードのダウンストリッピングバージョンである:これは、コンポーネントのライブラリであることを意味する前に、私が述べたように異なるオブジェクトのテンプレートコンテナをパラメータとしてテンプレートクラスを作成する方法
// In Library.h
using namespace std;
template<typename T,
template <typename, typename = std:allocator<T>> class Container>
class library {
Container<T> comp_lib;
library(Container<T> &Vc) {comp_lib = Vc}
};
// In mainProgram.cpp
#include "Library.h"
// Other includes...
using namespace std;
int main() {
library<int, vector> intLib;
return(0);
}
。したがって、整数を含むベクトルを保持する代わりに、ライブラリテンプレートは、一般的なコンポーネント、抵抗を含むベクトル、キャパシタを含むベクトル、およびインダクタを含むベクトルを保持するためのものです。抵抗、コンデンサ、インダクタはすべてコンポーネントベースクラスから派生したクラスです。
私は、コードを実行すると、それがコンパイルされないと、私はこれらのエラーメッセージが表示されます。
C2079:「INTLIBは」mainProgram.cpp
で[ライブラリINTLIB]ライン上で未定義のクラスのライブラリ」を使用していますC3855 'library':テンプレートパラメータ 'C'は、行[]の 宣言と互換性がありません。 ]最後の行
C3855 'library':テンプレートパラメータ 'vector'は、行[]の宣言と互換性がありません。 ] library.h(また、最後の行)
私はテンプレートテンプレートのパラメータに関してさまざまな記事を見てきましたが、この回答はこれまで問題になっていませんでしたが、 mが現在有する:同じテンプレートを使用して、すべての主要で
library<resistor, vector<resistor>> resistor_lib;
library<capacitor, vector<capacitor>> capacitor_lib;
library<inductor, vector<inductor>> inductor_lib;
library<component, vector<component>> component_lib;
: Template class with template container
所望の結果は以下のような文を書くことができるようになります。
おかげで、任意のヘルプは非常に
のように宣言され、またあなたは、すべてのpublicコンストラクタを持っています。 – Incomputable
申し訳ありませんが、例にコンストラクタを追加するのを忘れてしまいました。これは、複雑すぎることなく問題を説明しようとしているコードの断片です。元のコードには、デフォルトのコンストラクタとパラメータ化されたコンストラクタはありませんが、まだコンパイルされません。 –