簡體   English   中英

C ++ 11可選模板類型參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM