在运行时boost mpl lower_bound

时间:2013-11-20 21:21:34

标签: c++ boost c++11 metaprogramming

在下面的代码中,我有一个类SizedFoo,它是为特定大小构建的。类GeneralFoo包含不同大小的SizedFoos数组,然后函数Bar将找到SizedFoo,其初始化的最小大小大于传入的参数。我知道boost mpl有lower_bound函数,但只能用于静态已知值,有没有办法在运行时使用等价?

class SizedFoo {
  ...
public:
  SizedFoo(size_t size);
  void Bar();
}

template<size_t... sizes_in>
class GeneralFoo {
  typedef vector_c<size_t, sizes_in...>::type raw_sizes;
  typedef sort<raw_sizes>::type sorted_raw_sizes;
  typedef unique<sorted_raw_vector, equal_to<_1, _2> >::type sizes;

  std::array<SizedFoos*, size<sizes>::type> foos_;
public:
  GeneralFoo() {
    ...
  }
  void Bar(size_t size) {
    //DOESN'T WORK: size is a runtime value
    //auto index = lower_bound<sizes, size>::type;
    auto index = ... //What goes here?
    foos_[index]->Bar();
  }
}

1 个答案:

答案 0 :(得分:0)

mpl是编译时 - 你想要实现的只能在运行时完成,因为你需要使用std::lower_bound()