[英]templated class with templated constructor (of other type)
是否可以有一個模板化的類,並以其他類型來模板化構造函數?
像這樣的東西:
template<typename T1>
class Foo{
template<typename T2>
Foo(T1 aBar, T2 dummyArgument){
bar = aBar;
bytesOfT2 = sizeof(T2);
};
int bytesOfT2;
T1 bar;
};
這可能嗎? 如果是這樣,我怎么稱呼這樣的構造函數? 我需要考慮一些有關頭文件和cpp文件的問題嗎?
謝謝!
// edit:我的特定示例實際上要復雜得多。 我有
template <typename U1, U2>
class Foo{
U1 var1;
U2 var2;
};
template <typename T1>
class Bar{
template<typename T2, typename T3>
Bar(Foo<T2,T3> aFoo, T1 aVal){
val=aVal;
bytesOfT2=sizeof(T2);
bytesOfT3=sizeOf(T3);
};
int bytesOfT2;
int bytesOfT3;
T1 val;
};
這是否意味着我可以在這里僅使用Foo類型的任何變量來調用構造函數,並且它應根據Foo的特定版本自動選擇適當的構造函數(例如,如果我傳遞的變量為Foo類型,則它應將T2自動設置為bool和T3浮動)?
是的,一個類模板可以具有一個構造函數模板。 您可以像調用其他任何構造函數一樣調用它:
Foo<int> my_foo(42, 0.0);
這將調用T1 = int
(因為T1
是類模板參數,而類模板參數是int
)和T2 = double
(因為T2
是函數模板參數並從參數0.0
推導)來構造函數模板。
必須能夠從函數參數中推導出所有模板參數,否則無法調用構造函數模板。 無法為構造函數模板明確指定模板參數。
是的,有可能。 至於調用構造函數,您只需提供一個T1
類型的參數和另一個T2
類型的參數。 就是這樣(除非有人進入有關“呼叫”的術語討論)。
順便說一句,而不是第一個默認初始化bar
,然后分配給它,你應該直接初始化它,像
template< class T2 >
Foo( T1 const& aBar, T2 const& dummyArgument )
: bar( aBar )
, bytesOfT2( sizeof( T2 ) )
{}
在C ++教科書中查找構造函數和初始化程序。
干杯,……
您還可以使用多種template type
:
template<typename T1, typename T2>
class Foo{
public:
Foo(T1 aBar, T2 dummyArgument){
bar = aBar;
bytesOfT2 = sizeof(T2);
}
private:
int bytesOfT2;
T1 bar;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.