[英]Template constructor in a class template
我有一個例子:
#include <iostream>
#include <type_traits>
template<typename T>
struct A{
A([[maybe_unused]]T t){std::cout<<"contructor 1";}
template<typename X>
A([[maybe_unused]]X x1,[[maybe_unused]]X x2){
std::cout<<std::boolalpha;
std::cout<<std::is_same_v<decltype(x1),int><<std::endl;
std::cout<<"contructor 2"<<std::endl;
std::cout<<x1<<" "<<x2<<std::endl;
}
};
int main()
{
int ax=3;
[[maybe_unused]]A<char> a(ax,ax);
}
這將打印出來
false
contructor 2
3 3
但是我不明白為什么我應該有一個 class 構造函數模板。 而且無論class模板類型是什么,結果都是不變的。 任何人都可以解釋這個概念的原因。
此代碼肯定僅用於學習目的,因此我假設您通常會問模板化 class 中的模板化構造函數有什么樣的用例。
這種模式的一個很好的例子出現在沒有 inheritance 的類型擦除的常見實現中。請參見此處的示例:
這是一個相當高級的模式,但非常有趣。
順便說一句 - 在你的具體情況下你寫了
無論class模板類型是什么,結果都不變
但是如果你把 ax 的類型改成 short,它就會改變:
short ax = 3;
因為打印將參數類型(而不是 class 模板類型)與int
進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.