c++ - 具有模板化构造函数(其他类型)的模板化类

标签 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;
};

这可能吗?如果是这样,我将如何调用这样的构造函数?我是否需要考虑有关头文件和 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/

相关文章:

c++ - 为什么要输入两次非字符值才能结束程序

c++ - 为什么错误: "reference to fixes is ambiguous" is occurring in the code?

c++ - 初始化依赖于私有(private)模板类型的静态类成员 (C++)

php - 如何将带有CSS的模板包含到网站上的所有页面

java - 在 Java 中打印二维构造函数

c++ - 如何重置 shared_ptr?

c++ - 在 C++ 中尝试/抛出/捕获 : what's wrong with my code?

C++ 元编程 : Store integer by type

C++ rand 不适用于属性初始值设定项

c++ - 仅对 C++ 中的空私有(private)构造函数使用声明是否正确?