c++ - 使用可变参数模板时,如何获取第 n 个参数类型?
问题描述
我想要一个拥有n
值的类,就像std::tuple
. 不过,我不能完全使用元组,因为获取值有额外的逻辑——它们是按需的。
请以我写的这个类为例:
// somewhere else
template<typename TVal>
TVal valueGetter() { ... };
template<typename ...TColValue>
class ResultRow
{
public:
template<unsigned int TIndex>
get_nth_from_variadric<TIndex, TColValue> GetValue() const
{
return valueGetter<get_nth_from_variadric<TIndex, TColValue> >();
}
};
我希望它的工作方式是用户只需调用int myVal = GetValue<1>
,给定类模板参数ResultRow<bool, int>
。为此,我需要能够将模板参数的索引转换为类型。
我怎样才能做到这一点?
解决方案
一种方法是将可变参数转发到一个元组中,然后使用std::get
,例如:
#include <iostream>
#include <tuple>
template<size_t N, typename... Args>
auto f(Args&&... args)
{
return std::get<N>(std::tuple{std::forward<Args>(args)...});
}
int main(void)
{
std::cout << f<0>("Hello", "world") << ' ' << f<1>("Hello", "world") << f<0>('!') << '\n';
}
推荐阅读
- javascript - 未根据旋转角度正确计算秒数
- django - Django:在创建对象时搜索多对多字段
- twitter-bootstrap - Bootstrap 列的行为类似于行
- environment-variables - 为不同环境动态加载 firebase 配置参数
- python - 如何将创建的 EXE 文件转换回 Python?
- python - 使用 discord.py 时异步 def 出现语法错误
- javascript - Vue.Draggable un-choose 的事件是什么?
- ajax - 提交具有多个部分视图的表单
- php - php行尾出错
- azure - 无法使用 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 设置横向扩展 azure 函数实例