【发布时间】:2018-07-11 19:42:49
【问题描述】:
是否可以传递模板类型的参数包,并从模板类型存储类型推断参数包。
例如我有一个函数 foo,它返回一个包含参数A... 的元组。如果该函数接受向量参数包B... 存储要在A... 中找到的类型,那么这些可以仅从A... 以某种方式推断出来吗?还是必须始终明确指定?
template <typename A..., typename B...>
std::tuple<B...> foo(A...)
{
...
}
std::vector<int> a;
std::vector<char> b;
std::vector<std::string> c;
auto bar = foo<int, char, std::string>(a, b, c); // Works
auto bar = foo(a, b, c); // Will not work because B... can't be inferred yet.
此外,我可以通过static_assert 实现A... 中的所有类型必须为std::vectors 的约束,但我可以想象有一种更简洁的方式使用模板类型。请问如果存在这样的方法,您也可以建议吗?
谢谢。
【问题讨论】:
-
有什么理由反对返回类型扣除?为什么不像
auto foo(A... as) { return std::make_tuple(as...); } -
如果在实际构造元组之前需要知道类型。虽然我在这个例子中意识到情况并非如此。
-
此代码无法编译。您的示例中预期的元组是什么?
-
一个元组,包含传递给 foo 的每个向量的第一个元素。
标签: c++ templates c++17 variadic-functions