gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:09 26 4
gpt4 key购买 nike

是否有可能有一个模板化类并用其他类型模板化构造函数?

像这样:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com