0

我正在实现一个 N 维数组库。考虑这段代码:

template<int Rank, class Type>
class Array {
{
public:
    // constructor for vectors, valid when Rank==1
    Array(int dim0, Type val = Type());

    // constructor for matrices, valid when Rank==2
    Array(int dim0, int dim1, Type val = Type());
    ...
}

问题是如果Type == int,编译器会抱怨构造函数调用不明确(例如,Array<1,int>(1,1))。是否有这样的技巧enable_if使编译器忽略不匹配的构造函数Rank?(请不要使用 C++11)

谢谢

4

1 回答 1

1

您可以为此使用模板专业化:

template<int size, class Type>
class Array {
// General stuff for size > 2, if you have any
};


template <class Type>
class Array<1, Type>
{
// Code for one-dimensional array
};


template <class Type>
class Array<2, Type>
{
// Code for two-dimensional array
};

甚至完全指定为 int :

template <>
class Array<2, int>
{
// Code for two-dimensional integer array
};

他们拥有完全不同的一组公共接口也是完全有效的。

但我可能会传递一个数组或std::vector给定大小的维度或删除第三个参数,只需添加一个方法,比如说,populate(Type t)做这个技巧(它可能不仅对构造有用)。

于 2013-09-10T18:51:39.007 回答