是否有可能有一个模板化类并用其他类型模板化构造函数?
像这样:
template<typename T1>
class Foo{
template<typename T2>
Foo(T1 aBar, T2 dummyArgument){
bar = aBar;
bytesOfT2 = sizeof(T2);
};
int bytesOfT2;
T1 bar;
};
这可能吗?如果是这样,我将如何调用这样的构造函数?我是否需要考虑有关头文件和 cpp 文件的内容?
谢谢!
//编辑:我的具体例子实际上更复杂一点。我有
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 为 float)?
最佳答案
是的,一个类模板可以有一个构造函数模板。您可以像调用任何其他构造函数一样调用它:
Foo<int> my_foo(42, 0.0);
这会使用 T1 = int
调用构造函数模板(因为 T1
是一个类模板参数,而类模板参数是 int
)并且T2 = double
(因为 T2
是一个函数模板参数,是从参数 0.0
推导出来的)。
所有模板参数都必须能够从函数参数中推导出来,否则无法调用构造函数模板。无法显式指定构造函数模板的模板参数。
关于c++ - 具有模板化构造函数(其他类型)的模板化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983295/