我正在尝试构建一个模板类 A 并通过一个特殊的词“NONE”调用它的默认构造函数。 考虑我有:
template<class T>
class A {
public:
A():_val(0);
A(T val):_val(val);
private:
int _val;
}
我希望能够写作
A<int> x = None;
这将调用 A();
我在想也许我可以使用某种 typedef,但我不知道该怎么做
最佳答案
您可以提供一个虚拟类型和一个构造函数,该构造函数采用该类型并执行与默认构造实例等效的操作。例如,
struct None_t {};
constexpr None_t None{}; // const None_t None = {}; in C++03
template<class T>
class A {
public:
A() : _val() {};
A(None_t) : A() {} // A(None_t) : _val() {} in C++03
A(T val) : _val(val) {}
private:
T _val;
};
int main()
{
A<int> x = None;
}
请注意,我将 _val
更改为从 int
到 T
,否则模板没有多大意义。
关于c++ - 如何创建特殊词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772809/