如何使用 std::get 作为 boost-multi-index 容器键的 global_fun?
How to use std::get as a global_fun of boost-multi-index container keys?
我正在为元组集合使用 boost::multi-index
容器,我想在元组的第一个元素上创建索引。这是我的解决方案,方法是创建一个包装函数 getFirst
并将其作为 global_fun
传递给 multi_index_container
的模板参数
这个解决方案有效,但我想知道是否可以直接使用 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>
>
>
>;
}
您可以直接使用 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 以了解所涉及的模板参数的解释。
我正在为元组集合使用 boost::multi-index
容器,我想在元组的第一个元素上创建索引。这是我的解决方案,方法是创建一个包装函数 getFirst
并将其作为 global_fun
multi_index_container
的模板参数
这个解决方案有效,但我想知道是否可以直接使用 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>
>
>
>;
}
您可以直接使用 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 以了解所涉及的模板参数的解释。