は.hファイルで、私はテンプレートクラスの宣言があるとします。テンプレート別々のcppファイル内のクラスの一般的な専門:多くのテンプレート引数
template<typename T1,
typename T2,
typename T3,
typename T4>
class A {
public:
A();
~A();
void method1();
void method2();
...
}
このAPI がまだあるので、テンプレート引数の数が変更の対象であります未修理。私は分離された.cppファイルで一般的な専門化を実装することを好む。私は1つが(例えばctorのために)書き込むことを理解したよう:
各クラスAメソッドのtemplate<typename T1,
typename T2,
typename T3,
typename T4>
A<T1, T2, T3, T4>::A() {
...
}
のように...それはかさばる建設を使用するように私を悩ま:私はクラスAを実装
template<typename T1,
typename T2,
typename T3,
typename T4>
A<T1, T2, T3, T4>::
毎回メソッド。 1つまたは複数のテンプレート引数を追加または削除する場合は大きな問題になります。 これを避けるためにC++言語機能(C++ 11まで)を使用できますか?初期の私はこれを行うためのプリプロセッサマクロを見たが、私は思う醜いです:)
を使用されている方法で、変更はありません - あなたのユーザーをテンプレートはテンプレートのインスタンス化を可能にするためにこの特殊化を見る必要がありますので、この.cppでAのバージョンを明示的にインスタンス化する準備ができていない限り、この実装を.hファイルに置くこともできます。 – marcinj
C++ 11のバリアントテンプレートを使用することができます。 http://eli.thegreenplace.net/2014/variadic-templates-in-c/を確認してください – Mrnell