увеличить mpl lower_bound во время выполнения

0

В приведенном ниже коде у меня есть класс 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();
  }
}
Теги:
c++11
boost
metaprogramming

1 ответ

0

mpl - время компиляции - то, что вы пытаетесь достичь, может быть выполнено только во время выполнения, для этого вам нужно будет использовать std::lower_bound().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню