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
,并显式地写下它的所有模板参数。例如,检查有关模板参数的说明