簡體   English   中英

如何知道是否沒有給出可選的模板參數?

[英]How to know if optional template parameter was not given?

是否有可能知道是否未提供/設置可選模板參數? 嘗試使用 std::is_empty 無濟於事。

template<class T, class U = int> 
class A {
    public:
        T x;
        U y;
  
        void check() { 
            if (std::is_empty<U>::value)
                std::cout << "not given\n";
            else
                std::cout << "given\n";
        }
};

int main()
{
    A<float> a(1.5);    
    a.check();
}

如果用戶未提供,則為int

template<class T, class U = int> 
                          ^^^^^

這就是= int的意思。

沒有辦法在模板中判斷int是顯式傳遞的還是通過跳過它隱式設置的。

您可以通過多種方式使A<float>A<float, int>不同。

您可以U = void然后將模板中的RealU設置為U ,除非它是無效的,如果它是無效的,則設置為int

您可以采用class...U並將您的代碼限制為sizeof...(U)<=1 然后做同樣的RealU技巧。

您可以制作一個包裝器模板來執行這些操作,並讓真正的模板傳遞TU和一個bool ,說明是否傳遞了U

在每種情況下, A<float>的類型都不會與A<float, int>的類型匹配,因為您隱含地要求如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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