boost::multi_index 使用自定义密钥提取器语法问题?
boost::multi_index using custom key extractor syntax question?
我正在应用 boost multi_index 示例的示例 6。
https://www.boost.org/doc/libs/1_71_0/libs/multi_index/doc/examples.html#example6
我仍在学习键的语法 extraction.i 发现 member
键提取器的第三个参数需要指向类型 type
的 class
成员的指针,其中 class 是第一个参数,类型是第二个参数。
template<class Class,typename Type,Type Class::*PtrToMember>
struct member;
但是在示例 6 中,作者使用了不是指针的第三个参数.....
key_from_key<
member<car_manufacturer,
const std::string,
&car_manufacturer::name>,
member<car_model,
const car_manufacturer *,
car_model::manufacturer> >
这应该是 &
来创建指向 class car_model
类型 const car_manufacturer *
的成员的指针,所以给我们 pointer to pointer
... ..但他只是使用成员标识符car_model::manufacturer
,它只是指向成员的指针。
那么为什么作者从第三个参数中省略了 &
呢?
如果需要更多代码,我会把它放上去。
恭喜,您在 Boost.MultiIndex 文档中发现错误 :-)
它应该是 &car_model::manufacturer
而不是 car_model::manufacturer
,正如您正确指出的那样。更重要的是,car_model::manufacturer
甚至不是合法的 C++,因为如果有的话,它会声明一个 reference 到一个成员,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
成员的类型。
我会在文档中解决所有这些问题。感谢您发现混乱。
我正在应用 boost multi_index 示例的示例 6。 https://www.boost.org/doc/libs/1_71_0/libs/multi_index/doc/examples.html#example6
我仍在学习键的语法 extraction.i 发现 member
键提取器的第三个参数需要指向类型 type
的 class
成员的指针,其中 class 是第一个参数,类型是第二个参数。
template<class Class,typename Type,Type Class::*PtrToMember>
struct member;
但是在示例 6 中,作者使用了不是指针的第三个参数.....
key_from_key<
member<car_manufacturer,
const std::string,
&car_manufacturer::name>,
member<car_model,
const car_manufacturer *,
car_model::manufacturer> >
这应该是 &
来创建指向 class car_model
类型 const car_manufacturer *
的成员的指针,所以给我们 pointer to pointer
... ..但他只是使用成员标识符car_model::manufacturer
,它只是指向成员的指针。
那么为什么作者从第三个参数中省略了 &
呢?
如果需要更多代码,我会把它放上去。
恭喜,您在 Boost.MultiIndex 文档中发现错误 :-)
它应该是 &car_model::manufacturer
而不是 car_model::manufacturer
,正如您正确指出的那样。更重要的是,car_model::manufacturer
甚至不是合法的 C++,因为如果有的话,它会声明一个 reference 到一个成员,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
成员的类型。
我会在文档中解决所有这些问题。感谢您发现混乱。