共享指针和指向对象的常量

fre*_*ith 2 c++ boost c++11

如果我有课,比方说,

class Car {
  public:
    void Drive();
    void DisplayMileage() const;
};
Run Code Online (Sandbox Code Playgroud)

我基于这个类创建了一个共享指针,

typedef boost::shared_ptr<Car> CarPtr;
Run Code Online (Sandbox Code Playgroud)

然后我继续填充CarPtrs的载体,

std::vector<CarPtrs> cars...;
Run Code Online (Sandbox Code Playgroud)

我现在想迭代向量并做一些事情:

for(auto const &car : cars) {
   car->DisplayMileage(); // I want this to be okay
   car->Drive(); // I want the compilation to fail here because Drive isn't const.
}
Run Code Online (Sandbox Code Playgroud)

这是否可以在不将汽车的共享指针转换为指向const汽车的共享指针的情况下实现?

Cas*_*sey 8

听起来像是Boost.Range"间接"适配器的一个很好的用例:

for(auto const& car : cars | boost::adaptors::indirected) {
  car.DisplayMileage();
  car.Drive(); // error: passing 'const Car' as 'this' argument of 'void Car::Drive()' discards qualifiers [-fpermissive]
}
Run Code Online (Sandbox Code Playgroud)

在这里使用演示代码.