[英]C++11 Optional Template Type Parameter?
如果我想編寫一個具有可選類型參數的類,我可以執行以下操作:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.