这回摆弄一下模板。
C++ 里有一个 std::integer_sequence。可以定义编译期整数序列。比如说
#include <utility> using my_seq = std::integer_sequence<int, 1, 2, 3, 4, 5>; 接下来写一个 trait seq_sort_t,实现编译期排序。类似于:
using my_seq = std::integer_sequence<int, 2, 5, 3, 1, 4>; using sorted_my_seq = seq_sort_t<my_seq>; // std::integer_sequence<int, 1, 2, 3, 4, 5> 首先做一些准备工作。
运行时输出 通过类型萃取,将 std::integer_sequence 转换为运行时的 std::initializer_list。方便输出结果。
template <typename S> struct seq_to_init_list; template <typename T, T... Is> struct seq_to_init_list<std::integer_sequence<T, Is...>> { static constexpr std::initializer_list<T> value = {Is...}; }; template <typename S> constexpr auto seq_to_init_list_v = seq_to_init_list<S>::value; 用法如下:...