c++ 11可选模板类型参数

C++11 Optional Template Type Parameter?

本文关键字:类型参数 c++      更新时间:2023-10-16

如果我想编写一个具有可选类型参数的类,我可以这样做:

template<typename T>
struct X
{
        T t;
};
template<>
struct X<void>
{
};
int main()
{
        X<int> a;
        X<void> b;
};

是否有一种方法可以使空是不必要的?即:

int main()
{
        X<int> a;
        X b;
};

我试过了:

template<typename T = void>
struct X
{
    T t;
};
template<>
struct X<void>
{
};
int main()
{
    X<int> a;
    X b;
};

但是我得到:

test.cpp: In function ‘int main()’:
test.cpp:16:4: error: missing template arguments before ‘b’
test.cpp:16:4: error: expected ‘;’ before ‘b’

技术上需要写:

X<> b;

但是你可以简单地用typedef:

来解决这个问题
typedef X<> Y;

然后你可以这样做:

Y b;

如果这是可能的就好了:

template <typename T>
using X = std::is_void<T>::value ? _X<> : _X<T>

但这不能编译,所以不幸的是你被困在一个typedef像其他答案。