gpt4 book ai didi

c++ - 不明确的模板类构造函数

转载 作者:行者123 更新时间:2023-11-28 07:26:10 43 4
gpt4 key购买 nike

我正在实现一个 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)

谢谢

最佳答案

您可以为此使用模板特化:

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
};

它们拥有完全不同的一组公共(public)接口(interface)也是完全有效的。

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

关于c++ - 不明确的模板类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726457/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com