4

如果我想编写一个具有可选类型参数的类,我可以执行以下操作:

template<typename T>
struct X
{
        T t;
};

template<>
struct X<void>
{

};

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

有没有办法写出来,这样 void 是不必要的?IE:

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’
4

2 回答 2

4

从技术上讲,您需要编写:

X<> b;

但是您可以使用 typedef 简单地修复这种丑陋:

typedef X<> Y;

然后你可以这样做:

Y b;
于 2012-12-24T03:18:03.380 回答
1

如果这是可能的:

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

但这并不能编译,所以不幸的是你被困typedef在另一个答案中。

于 2012-12-27T01:09:52.313 回答