Mat*_*Mat 0 c++ templates constructor
是否有可能有一个模板化的类,并使用其他类型模板构造函数?
这样的事情:
template<typename T1>
class Foo{
template<typename T2>
Foo(T1 aBar, T2 dummyArgument){
bar = aBar;
bytesOfT2 = sizeof(T2);
};
int bytesOfT2;
T1 bar;
};
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我怎么称呼这样的构造函数?我是否需要考虑标题和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;
};
Run Code Online (Sandbox Code Playgroud)
这是否意味着我可以在这里使用任何类型的Foo变量调用构造函数,它应该根据特定版本的Foo自动选择正确的构造函数(例如,如果我传递的变量是Foo类型,它应该自动将T2设置为bool和T3浮动)?
是的,类模板可以有一个构造函数模板.你可以调用它来调用任何其他构造函数:
Foo<int> my_foo(42, 0.0);
Run Code Online (Sandbox Code Playgroud)
这将调用构造函数模板T1 = int(因为T1是一个类模板参数,类模板参数是int)和T2 = double(因为它T2是一个函数模板参数,并从参数中推导出来0.0).
必须能够从函数参数推导出所有模板参数,否则无法调用构造函数模板.无法显式指定构造函数模板的模板参数.