我正在尝试构建一个模板类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,但我不知道如何
答案 0 :(得分:3)
您可以提供一个虚拟类型和一个构造函数,它采用该类型,并且相当于默认构造一个实例。例如,
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
,因为否则模板没有多大意义。
答案 1 :(得分:2)
通常的方法是创建一个标记类,在本例中为none_type
并且有一个constexpr(或静态const)模型可用。
struct none_type {};
constexpr auto none = none_type {};
template<class T>
class A {
public:
A():_val(0) {};
A(none_type) : A() {};
A(int val):_val(val) {};
private:
int _val;
};
int main()
{
A<int> a = none;
}