c++ - 构造模板化元组类型
问题描述
我正在尝试编写这样的函数
template<
bool b, RT = std::conditional_t<b,
std::tuple<int, int, int, int>,
std::tuple<int, int, int, int, double, double, double, double>
>
RT function()
{
int i1, i2, i3, i4;
if constexpr(b)
{
double i5, i6, i7, i8;
return { i1, i2, i3, i4, i5, i6, i7, i8 };
}
else
{
return { i1, i2, i3, i4 };
}
}
有没有办法为元组创建一个模板化的 typedef 以便我可以简化上述函数
template<typename T, int N>
using tuple_t = std::tuple<T, T, ... N1 times>
template<typename T1, int N1, typename T2, int N2>
using tuple_t = std::tuple<T1, T1, ... N1 times, T2, T2, ... N2 times>
解决方案
您可以使用返回类型推导并将聚合初始化替换为调用make_tuple
:
template<bool b>
auto function()
{
int i1, i2, i3, i4;
if constexpr(b)
{
double i5, i6, i7, i8;
return std::make_tuple(i1, i2, i3, i4, i5, i6, i7, i8);
}
else
{
return std::make_tuple(i1, i2, i3, i4);
}
}
如果您仍然需要返回类型,您可以简单地创建一个特征:
template <bool b>
using return_t = decltype(function<b>());
推荐阅读
- javascript - 错误:导航器只能包含“屏幕”组件作为其直接子级
- css - 为使用 Perl 的 CGI::FormBuilder 生成的按钮添加类属性
- xml - zen报告-除以两个求和值
- html - iframe 中的活动是否有助于搜索历史记录?
- html - 如何使用 vba excel 的网络抓取来选择网页上的选项卡
- r - 在 r randomforste 网格搜索中建模后优化模型
- python - 在 pyspark 中使用 foreachPartition() 函数时如何知道当前正在运行哪个分区?
- javascript - 在这个例子中,为什么 dom.innertext 在 while 结束后被更新和渲染?
- powershell - 使用 AccessToken 验证 powershell 脚本
- c++ - c++ 中 regex_match 的输出是什么;