今天我遇到了将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)的重载运算符起作用。
答案 0 :(得分:3)
你应该简单地解除它(可能先检查一下,它是否有效)。
exit << ... << *SM.stats_ << *SM.armor_ << *SM.weapon_;