c++ - 如何创建特殊词

标签 c++

我正在尝试构建一个模板类 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 更改为从 intT,否则模板没有多大意义。

关于c++ - 如何创建特殊词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772809/

相关文章:

c++ - QTableView委托(delegate)小数点后的数字

可以从其他类调用的 C++ 多实例结构

c++ - Json QtNetwork回复QByteArray

c++ - 调用方法时出现访问冲突异常

C++ - 每 X 毫秒执行一次函数

c++ - 如何将 gdal api 集成到 visual studio 2012 C++

c# - 套接字代理服务器

c++ - Pybind11:如何为结构成员变量分配默认值?

c++ - 如何在一次遍历中近似数组中不同值的计数

c++ - std::bind 如何与成员函数一起工作