テンプレート パラメーターの 1 つに数値定数を指定して、C++ テンプレート クラスの部分的な特殊化を定義する簡単な方法はありますか? 特定の種類のテンプレートの組み合わせ専用の特別なコンストラクターを作成しようとしています:
template <typename A, size_t B> class Example
{
public:
Example() { };
A value[B];
};
template <typename A, 2> class Example
{
public:
Example(b1, b2) { value[0] = b1; value[1] = b2; };
};
Expected identifier before numeric constant
この例はコンパイルされず、2 番目の定義でエラーが返されます。
ここや他の場所で多くの例を見てきましたが、ほとんどは定数ではなく型の特殊化を中心に展開しているようです。
編集:
条件付きで使用されるコンストラクターを作成する方法を探しています。機能的には次のようになります。
template <typename A, size_t B> class Example
{
public:
// Default constructor
Example() { };
// Specialized constructor for two values
Example<A,2>(A b1, A b2) { value[0] = b1; value[1] = b2; };
A foo() {
A r;
for (size_t i = 0; i < b; ++b)
r += value[i];
return r;
}
// Hypothetical specialized implementation
A foo<A, 2>() {
return value[0] + value[1];
}
A value[B];
};