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:是的,这是一种元编程的形式。我真的没有一本书可以推荐(对不起),但是如果你是Google的“sfinae”和“template metaprogramming C++ 11”,那么你可能会找到有用的资源。 –