带模板化构造函数的模板化类(其他类型)

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浮动)?

Jam*_*lis 8

是的,类模板可以有一个构造函数模板.你可以调用它来调用任何其他构造函数:

Foo<int> my_foo(42, 0.0);
Run Code Online (Sandbox Code Playgroud)

这将调用构造函数模板T1 = int(因为T1是一个类模板参数,类模板参数是int)和T2 = double(因为它T2是一个函数模板参数,并从参数中推导出来0.0).

必须能够从函数参数推导出所有模板参数,否则无法调用构造函数模板.无法显式指定构造函数模板的模板参数.