c++ - 从模板类型包推断参数包类型
问题描述
是否可以传递模板类型的参数包,并从模板类型存储类型推断参数包。
例如,我有一个函数 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.
此外,我可以通过 a 实现所有类型A...
必须为std::vector
s的约束,static_assert
但我可以想象有一种更简洁的方式使用模板类型。如果存在这种方法,您能否也建议一种方法?
谢谢。
解决方案
考虑到提供的示例和澄清注释(“函数应该将第一个元素的元组返回给每个向量”),如果出于某种原因不需要完全auto
返回类型推导,则尾随返回类型将完成这项工作:
#include <tuple>
#include <vector>
template<class... ARG> auto foo(ARG... ) -> std::tuple<typename ARG::value_type...>;
auto bar() {
std::vector<int> a;
std::vector<bool> b;
std::vector<char* > c;
return foo(a, b, c);
}
推荐阅读
- javascript - 如何将此 JavaScript 逻辑移植为要在 PHP 中使用的单行 RegEx?
- html - 移动可用性:需要帮助修复“文本太小……”和“可点击元素太近……”
- python - 如何在 Python 中对列表中的列进行排序
- swift - Swift:返回运行时随机不透明类型会产生错误
- java - 将字符串值添加到数组索引时出错
- javascript - 用 python 抓取一个杂乱无章的 javascript-heavy 网站
- kotlin - Kotlin:初始化并获取变量
- php - 用 Xdebug 连接 nginx
- excel - 如何将第二个字典的键放在第一个字典中?
- scipy - 我可以在 sympy.nsolve 中为非线性方程系统使用其他求解器吗?