gpt4 book ai didi

c++ - 如何将std::get用作boost-multi-index容器键的global_fun?

转载 作者:行者123 更新时间:2023-12-02 10:24:03 27 4
gpt4 key购买 nike

我正在使用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>
>
>
>;
}

最佳答案

您可以直接使用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实例,以获取有关所涉及模板参数的说明。

关于c++ - 如何将std::get用作boost-multi-index容器键的global_fun?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54300413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com