【发布时间】:2022-01-13 20:14:27
【问题描述】:
鉴于以下情况,如何从参数包中正确构造未知类型的对象?
template < typename... Types >
auto foo( Types&&... types ) {
auto result = Types{ }; // How should this be done?
// Do stuff with result
return result;
}
我希望模板函数只能用匹配的类型调用,所以参数包中的所有内容都应该是相同的类型。例如,如果我需要使用decltype,我引用哪个单独的项目并不重要(否则注释掉部分中的相关代码会导致编译错误)。
【问题讨论】:
-
如果参数包为空,你希望创建什么对象?
int?bool?。如果函数需要至少一个参数,只需声明一个带有一个模板参数和一个可能为空的参数包的函数,然后直接使用第一个参数的类型。 -
@SamVarshavchik 轻松修复
static_assert( sizeof...( pack ) > 1 );。我也考虑过这种可能性,但现在让我们忽略它并按原样回答问题。假设在另一个场景中使用。
标签: c++ templates c++17 parameter-pack