C++ 如何使用std::get作为boost多索引容器键的全局乐趣?
我正在为元组集合使用C++ 如何使用std::get作为boost多索引容器键的全局乐趣?,c++,tuples,boost-multi-index,C++,Tuples,Boost Multi Index,我正在为元组集合使用boost::multi-index容器,我想在元组的第一个元素上创建一个索引。我的解决方案是创建一个包装函数getFirst,并将其作为global\u fun传递给multi\u index\u容器的模板参数 这个解决方案是可行的,但我想知道是否可以直接使用std::get,而不定义另一个包装函数 namespace { using my_tuple_t = std::tuple<int, double>; int getFirst(my_
boost::multi-index
容器,我想在元组的第一个元素上创建一个索引。我的解决方案是创建一个包装函数getFirst
,并将其作为global\u fun
传递给multi\u index\u容器的模板参数
这个解决方案是可行的,但我想知道是否可以直接使用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>
>
>
>;
}
名称空间{
使用my_tuple\u t=std::tuple;
int getFirst(我的元组){
返回std::get(x);
}
结构优先{
};
使用my_container=bmi::multi_index_container<
我的元组,
bmi::按索引索引<
bmi::有序_唯一<
标签,
bmi::全球娱乐
>
>
>;
}
您可以直接使用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>>
>
>
>;
使用我的容器=bmi::多索引容器<
我的元组,
bmi::按索引索引<
bmi::有序_唯一<
标签,
bmi::全球娱乐
>
>
>;
问题在于,std::get
不是一个函数,而是一组重载的函数模板,global\u fun
需要一个具体的函数指针,因此要获得它,您需要实例化std::get
,并显式地写下它的所有模板参数。例如,检查有关模板参数的说明