智能指针功能

时间:2013-11-19 09:27:33

标签: c++ function smart-pointers

今天我遇到了将std :: unique_ptr传递给function / overloaded运算符的问题。例如:

    HEADER
class SpaceMarine{
   public:
        ...
        friend std::ostream & operator << (std::ostream &exit, const SpaceMarine &SM);

   private:
       std::string name_; 
       .... (some other few parameters)
       std::unique_ptr<armor> armor_; 

在.cpp中我得到了:

std::ostream & operator << (std::ostream &exit, const SpaceMarine& SM){ 

    exit << ... << *SM.stats_ << !!!!!! << *SM.weapon_; 
    return exit; 
}

stats_和weapon_都是通过指针成为主类成员的类。 对于所有类,他们自己的重载运算符&gt;&gt;和&lt;&lt;工作(意思是 - 当我简单地写:

std::cout << armor1;
or
std::cin >> weaponb;

他们工作)。

所以:我该怎么做才能代替!!!!!! ,对于unique_ptr,以类似于* SM.stats_的方式工作?所以它指向装甲类的重载运算符并在主类的重载运算符中使用它?

修改

对于MikeSeymour:

std::ostream & operator << (std::ostream &exit, const Armor& arm){
    return exit << "\n" << arm.name_ << "  AR: " << arm.toughness_;
}

但是,正如我之前写的那样 - 成员类(Armor,Weapon)的重载运算符起作用。

1 个答案:

答案 0 :(得分:3)

你应该简单地解除它(可能先检查一下,它是否有效)。

exit << ... << *SM.stats_ << *SM.armor_ << *SM.weapon_;