我正在应用boost multi_index示例的示例6。
https://www.boost.org/doc/libs/1_71_0/libs/multi_index/doc/examples.html#example6
我仍在学习密钥提取的语法。我发现member
密钥提取器的第三个参数需要一个指向class
类型为type
的成员的指针,其中class是第一个arg,类型是第二个arg。
template<class Class,typename Type,Type Class::*PtrToMember>
struct member;
但是在示例6中,作者使用了第三个arg,它不是指针.....
key_from_key<
member<car_manufacturer,
const std::string,
&car_manufacturer::name>,
member<car_model,
const car_manufacturer *,
car_model::manufacturer> >
这应该是
&
来创建指向类型为car_model
的类const car_manufacturer *
的成员的指针,所以给我们pointer to pointer
.....但是他只使用成员标识符car_model::manufacturer
,该标识符仅指向会员。那么,为什么作者在第三个论点中省略了
&
呢?如果需要更多代码,我会把它放进去。
最佳答案
恭喜,您在Boost.MultiIndex docs中发现错误:-)
如您正确指出的,它应该是&car_model::manufacturer
而不是car_model::manufacturer
。而且,car_model::manufacturer
甚至不是合法的C ++,因为它将声明对成员的引用,即does not exist in the language。
此外,文档说:
struct car_model
{
std::string model;
car_manufacturer* manufacturer;
int price;
};
应该在哪里(正确地写在实际代码中):
struct car_model
{
std::string model;
const car_manufacturer* manufacturer;
int price;
};
否则,
member<car_model,const car_manufacturer *,&car_model::manufacturer>
将与manufacturer
成员的类型不匹配。我将在文档中修复所有这些问题。感谢您发现混乱。
关于c++ - 使用自定义键提取器语法问题的boost::multi_index?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58919665/