如何向C++可变参数类模板添加用户指定的编译期整型常量
低侵入备选方案(无需调整模板参数顺序)
如果不想改动原有模板的参数结构,可以用编译期常量标签传递N值,无运行时开销:
// 定义编译期常量标签 template<size_t N> constexpr inline std::integral_constant<size_t, N> deg_tag{}; // 构造函数新增第一个参数接收标签 template<typename Part, typename... Parts> class State { // 原有逻辑不变 template<size_t N> State(std::integral_constant<size_t, N>, Part&& p, Parts&&... ps) : _parts(std::forward<Part>(p), std::forward<Parts>(ps)...) { static_assert((std::is_same_v<typename Parts::energy_t, std::array<double, N>> && ...), "部件energy_t类型与指定N不匹配"); } }; // 使用方式 State state{deg_tag<3>, X(), Y()};
内容的提问来源于stack exchange,提问作者Bbllaaddee
相关产品推荐
相关产品推荐

