c++ - 用 C++17 特性替换 Boost MPL 容器
问题描述
我有一些基于 MPL 容器的旧代码,enable_if
用于激活一些调度,如下所示:
typedef boost::mpl::vector<std::int16_t, std::int32_t, int64_t, float, double, std::complex<float>, std::complex<double> > Types;
template <typename Vector>
typename boost::enable_if<typename boost::mpl::empty<Vector>::type, void>::type void process(/*args*/)
{
}
template <typename Vector>
typename boost::disable_if<typename boost::mpl::empty<Vector>::type, void>::type void process(/*args*/)
{
process<typename boost::mpl::pop_front<Vector>::type>();
}
void outside()
{
process<Types>();
}
所以对于 C++17,我可以使用 constexpr,但我仍然需要传入的类型列表outside
。是否有适当的方法来声明容器类型以便我可以使用可变参数模板?
解决方案
可能最简单的转换是将 Boost.MPL 换成Boost.MP11:
using Types = mp_list<...>;
template <typename L>
void process() {
if constexpr (!mp_empty<L>) {
process<mp_pop_front<L>>();
}
}
推荐阅读
- php - 使用简单的 PHP 登录用户但数据库查询失败
- android - 我希望我的服务每天工作一次,但它却工作多次
- php - 无法在 Apache、Linux、cPanel 下的 PHP 应用程序根目录之外写入文件
- python - 在水平条形图中居中 yticklabels - matplotlib
- javascript - ReactJS 中未处理的拒绝
- lua - 使用 Lua 脚本向 BizHawk 发送输入
- node.js - 如何在现有节点项目中添加 Angular Universal 生成的 express 应用程序
- regex - 正则表达式从字符串中提取电话号码
- python-3.x - 从 DataFrame 中提取一列以使用一列作为两者的交集插入另一列
- javascript - 修复在画布中的位置而不会失去响应能力