C++中尖括号和双冒号

43 阅读1分钟

以《汽车总动员》为背景,我们可以类比这些概念:

  • 尖括号 <...> :就像汽车总动员中的不同车型一样,每个车型都有不同的特点和功能。尖括号用于指定不同的类型或参数,就像选择不同的汽车型号一样。
  • 双冒号 :: :在汽车总动员中,不同车型都属于不同的品牌或制造商。双冒号用于指定某个品牌或制造商下的特定车型,就像在代码中指定某个类的成员一样。

现在以《汽车总动员》为背景给你一个类似的例子:

#include <iostream>
#include <string>

class Car {
public:
    Car(const std::string& name) : name_(name) {}

    void Drive() {
        std::cout << name_ << " is driving!" << std::endl;
    }

private:
    std::string name_;
};

class CarRace {
public:
    CarRace() {
        McQueen_ = std::make_shared<Car>("McQueen");
        Francesco_ = std::make_shared<Car>("Francesco");
        
        // 创建订阅器来接收汽车比赛的消息
        car_sub_ = this->create_subscription<std::string>(
            "car_race_topic", 10,
            std::bind(&CarRace::HandleCarRaceMessage, this, std::placeholders::_1)
        );
    }

    void StartRace() {
        McQueen_->Drive();
        Francesco_->Drive();
        // ...
    }

private:
    void HandleCarRaceMessage(const std::string& message) {
        std::cout << "Received car race message: " << message << std::endl;
    }

    std::shared_ptr<Car> McQueen_;
    std::shared_ptr<Car> Francesco_;
    rclcpp::Subscription<std::string>::SharedPtr car_sub_;
};

int main() {
    CarRace race;
    race.StartRace();

    return 0;
}

在这个例子中,Car 类表示一辆汽车,CarRace 类表示一场汽车比赛。CarRace 类中创建了两个汽车对象(McQueen_Francesco_),并使用 std::make_shared 创建了指向这些汽车对象的共享指针。然后,它创建了一个订阅器 car_sub_,用于接收有关汽车比赛的消息。每当收到消息时,HandleCarRaceMessage 函数将被调用。

希望这个例子能帮助你更好地理解尖括号和::在C++中的使用,以及如何将其与《汽车总动员》背景联系起来。