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 键提取器的第三个参数需要指向类型 typeclass 成员的指针,其中 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 成员的类型。

我会在文档中解决所有这些问题。感谢您发现混乱。