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

标签 c++ tuples boost-multi-index

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

相关文章:

c++ - 如何在不使用if语句的情况下找到数组中的最大值和最小值?

c++ - 服务器监听本地主机:8080 can Apache still listen to port 80?

python - 验证导致错误

c++ - 使用带有 std::unique_ptr 元素的 boost::multi_index::multi_index_container 的初始化列表

Java LinkedHashSet 索引有效性

c++ - 为什么 std::tr1::unordered_map 比本地 HashMap 慢?

c++ - 如何将 Golang 编写的应用程序作为 Windows 服务运行

python - 从元组中删除空格

list - 如何在映射列表时访问当前映射的元组?