1
以下のコードでは、一連の値を特殊化することが可能かどうか疑問に思っていました。私の例では、既知のサイズの配列を使用するためにN=3
またはN=4
の特殊化を作成したいと考えています。この場合、コードの重複を避けることは可能ですか?テンプレートを2つの異なる値に特化する方法は?
template <typename T, unsigned int N>
class A
{
public:
T* data;
};
template <typename T>
class A<T, 3>
{
public:
T data[3];
};
template <typename T>
class A<T, 4>
{
public:
T data[4];
};
int main()
{
A<int, 1> u;
std::cout << sizeof(u.data) << std::endl; // Size of pointer
A<int, 3> v;
std::cout << sizeof(v.data) << std::endl; // Size of data
A<int, 4> w;
std::cout << sizeof(w.data) << std::endl; // Size of data
return 0;
}
恐ろしいです。私はこれがC++のメタプログラミングの一種だと思いますか?私はそれに慣れていないし、知っているので、私は本をつかむことができ、 "SFINAEd"私は理解していないので、それを学ぶことができます。 – BRabbit27
@ BRabbit27:はい、これはメタプログラミングの一形態です。 (申し訳ありませんが)私は本当に本を持っていませんが、 "sfinae"と "template metaprogramming C++ 11"の場合は、おそらく役に立つリソースが見つかります。 –