在编译时对积分常量的元组进行排序

时间:2015-12-11 23:12:47

标签: c++ templates c++11 tuples metaprogramming

以下所有内容T均为std::integral_constant<int, X>

如何设计一个结构和一个函数,将一个整数常量列表作为输入,并返回一个已经对常量进行排序的std::tuple<std::integral_constant<int, X>...>

template <class... T>
struct ordered_tuple;

template <class... T>
constexpr typename ordered_tuple<T...>::type make_ordered_tuple(T&&...);

使用方法是:

std::integral_constant<int, 5> i5;
std::integral_constant<int, 4> i4;
std::integral_constant<int, 9> i9;
std::integral_constant<int, 1> i1;
auto tuple = make_ordered_tuple(i5, i4, i9, i1); 

1 个答案:

答案 0 :(得分:4)

这是一种方法。我实现了合并排序,它非常适合函数式编程。它不到200行。其中大部分基于我在an earlier answer中使用的元函数。这是基于许多其他人在SO问题中使用的东西,与类型列表中的基本操作等有关...

改进的一种方法是减少所需的模板递归深度,目前它是 1) BuildingsController viewing all buildings renders index template Failure/Error: def self.searchcity(search) where("city LIKE ?", "%#{search}%") ArgumentError: wrong number of arguments (0 for 1) # ./app/models/building.rb:39:in `searchcity' # ./spec/controllers/buildings_controller_spec.rb:103:in `block (3 levels) in <top (required)>' 。我想它可能是O(n)但我确实不确定,这取决于你是否能找到重写O(log n)元函数的方法。 (与Yakk在另一个问题中指出的相似。)

merge