我正在使用boost::multi-index
容器存储元组,并且我想在元组的第一个元素上创建索引。这是我的解决方案,方法是创建包装函数getFirst
并将其作为multi_index_container
global_fun
的模板参数
此解决方案有效,但我想知道是否可以直接使用std::get
,而无需定义另一个包装函数。
namespace {
using my_tuple_t = std::tuple<int, double>;
int getFirst(my_tuple_t x) {
return std::get<0>(x);
}
struct first {
};
using my_container = bmi::multi_index_container<
my_tuple_t,
bmi::indexed_by<
bmi::ordered_unique<
bmi::tag<struct first>,
bmi::global_fun<my_tuple_t, int, &getFirst>
>
>
>;
}
答案 0 :(得分:0)
您可以直接使用std::get
,但是获得的内容比完成后仅包装内容要冗长得多:
using my_container = bmi::multi_index_container<
my_tuple_t,
bmi::indexed_by<
bmi::ordered_unique<
bmi::tag<struct first>,
bmi::global_fun<const my_tuple_t&, const int&, &std::get<0, int, double>>
>
>
>;
问题在于std::get
不是函数,而是函数模板的重载集合,并且global_fun
需要具体的函数指针,因此,您需要使用以下实例化std::get
它的所有模板参数明确记录下来。检查实例cppreference.com,以获取有关所涉及的模板参数的说明。