C++ 基于模板类的构造
我有两个模板类。现在,我想构造一个新变量,该变量的类型与现有变量相同,并且具有基于该变量的模板参数 更具体地说,我有:C++ 基于模板类的构造,c++,C++,我有两个模板类。现在,我想构造一个新变量,该变量的类型与现有变量相同,并且具有基于该变量的模板参数 更具体地说,我有: 模板 福班 { 公众: Foo()=默认值; }; 模板 分类栏 { 公众: Bar()=默认值; }; 这使我能够构建,例如: intmain() { 富富,; 酒吧; 返回0; } 现在,我想分配一个新变量,它要么是Foo要么是Bar,取决于现有变量,并且具有相同的T、不同的N,并且(可选)模板参数的其余部分与现有变量相同。 例如,我想要一个可以构造 Foo 福 我想
模板
福班
{
公众:
Foo()=默认值;
};
模板
分类栏
{
公众:
Bar()=默认值;
};
这使我能够构建,例如:
intmain()
{
富富,;
酒吧;
返回0;
}
现在,我想分配一个新变量,它要么是Foo
要么是Bar
,取决于现有变量,并且具有相同的T
、不同的N
,并且(可选)模板参数的其余部分与现有变量相同。
例如,我想要一个可以构造
Foo
福
我想到了一个助手函数:
模板
自动构造(X&)
{
返回X();
}
做某事
autoa=construct(foo);
但这让我的编译器不高兴:
error: no matching function for call to 'construct'
auto a = construct(foo);
^~~~~~~~~
note: candidate template ignored: could not match 'type-parameter-0-3' against 2
auto construct(X<T, N, Args...>&)
^
1 error generated.
错误:调用“construct”时没有匹配的函数
自动a=构造(foo);
^~~~~~~~~
注意:已忽略候选模板:无法将“type-parameter-0-3”与2匹配
自动构造(X&)
^
生成1个错误。
类型模板参数和非类型模板参数不容易混合。您的
构造
需要一个模板类X
,即具有1个类型、1个大小和更多类型参数的模板<代码>Foo
不是这样。如果您将这些修改为size\t
您的代码将编译:
template <template <typename, size_t, size_t...> class X,
typename T,
size_t N,
size_t... Args> // <--- Args are size_t not types
auto construct(X<T, N, Args...>&)
{
return X<T, N + 2, Args...>();
}
// ....
int main() {
Foo<int, 2, 2> foo;
Bar<double, 3> bar;
Foo<int,2+2,2> a = construct(foo);
return 0;
}
template//Inconstrcut
,
不应该是
,因为模板末尾有数量可变的size\u t
参数?@NathanOliver这里是的,在我的现实生活中,我不想关心其他模板的类型。也许我可以编辑得更清楚,那不是以前的Bar
Foo
不起作用,因为M没有默认值
不幸的是,这是语言中的一个漏洞。您可以使用some\u type…
获取非类型模板参数,也可以使用class…
获取类型参数。没有同时接受类型和非类型的泛型…
。不,它没有帮助。我也不确定是否有什么能帮上忙。非常感谢!所以我必须对所有的尾随参数进行详细说明?模板化的类会发生什么情况?@TomdeGeus您不能轻易地混合类型参数和非类型参数。您需要像代码中那样的专门化。这是一个相当激烈的限制,尽管根据用例有一些变通方法。例如,您可以考虑使用<代码> STD::TimeAlgIn常量而不是 SiZeStt s,然后是它的所有类型。非常清楚。(尽管令人失望;)