如何使用 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 以获取所涉及的模板参数的说明。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 涡轮增压 这个声明“int fun-name(static int)”在C++中是否有效,为什么
- Global Vector & Push_Back
- 错误:在 MacOS 上"no member named 'uint8_t' in the global namespace"
- 如何安全地实施"Using Uninitialized Memory For Fun And Profit"?
- CMake: Hide -WShadow global compile flag for child target
- Visual Studio添加真正"global"默认包含路径
- 静态"global"向量似乎未填充
- emscripten 断言=1 生成链接器错误"Referencing global in another module!"
- 为什么系统("color 3")"global"?
- 我正在尝试使用递归来反转堆栈.函数 fun() 中传递了什么?s 是类堆栈的对象
- Windows Global Hook C++
- C 11:STD Ref Global变量和非功能 - 局部线程界初始化订单
- 模板化重载运算符的编译错误"No global operator found"
- const int* const fun(const int* const& p) const的含义;
- std::locale::global是否影响printf()函数
- 如何阅读C++中的NetCDF "global attribute"
- 将字符串转换为wstring[不带区域设置的俄语符号::global]
- std::使用虚拟呼叫操作员转换抛出"global functions do not have 'this' pointers"