[英]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
技巧。
您可以制作一個包裝器模板來執行這些操作,並讓真正的模板傳遞T
、 U
和一個bool
,說明是否傳遞了U
。
在每種情況下, A<float>
的類型都不會與A<float, int>
的類型匹配,因為您隱含地要求如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.