在下面的代码中,我有一个类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();
}
}
答案 0 :(得分:0)
mpl是编译时 - 你想要实现的只能在运行时完成,因为你需要使用std::lower_bound()
。