如果我想编写一个具有可选类型参数的类,我可以执行以下操作:
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’
答案 0 :(得分:4)
你在技术上需要写:
X<> b;
但你可以用typedef简单地修复这个丑陋:
typedef X<> Y;
然后你可以这样做:
Y b;
答案 1 :(得分:1)
如果只有这个可能:
template <typename T>
using X = std::is_void<T>::value ? _X<> : _X<T>
但这不编译,所以不幸的是你像其他答案一样被typedef
所困扰。