愚蠢的问题:按价值传递此信息的最佳方式是什么?
背景:让我们使用汽车和汽车选择。我曾经有过福特(FordOptions),本田(HondaOptions)等建筑商。所有汽车都来自Car,CarOptions的所有选项。我曾经有一个汽车工厂,它传递一个指向CarOption的指针,检查类型,生成适当的汽车,并返回指向通用汽车的指针。
我现在已经改变了这一点,以便CarOption有一个虚拟的ProduceCar返回Car,并且每个单独的汽车选项都实现了它的特定生产。因此,当我获得一个指向汽车选项的通用指针时,我只需调用CarOptions.ProduceCar并获取一个指向汽车的通用指针。
这一切都很好,除了在说明FordOption.ProduceCar的实现中我需要将FordOption实例传递给Ford构造函数。我可以通过传递“this”并改变Ford的构造来接受指向FordOptions而不是FordOptions的指针。但是,我希望它能够通过价值,或者至少通过参考来获取FordOptions,但是很难这样做。
我打赌一个简单的答案的长问题。感谢。
答案 0 :(得分:4)
您只需取消引用this
指针...并根据被调用的方法,传递引用(如示例中所示)或按值
Ford::Ford(const FordOption &o) {}
Ford FordOption::produceCar() {
return Ford(*this); // <-- Dereference this
}
答案 1 :(得分:1)
this
是一个常规的旧指针。因此*this
会生成对象this
指向的引用,然后可以随意传递。
答案 2 :(得分:1)
如果您想要做的只是按价值或参考路径this
,只需使用*this
:
return new Ford(*this);
答案 3 :(得分:1)
我相信你想要取消引用'this'指针。为此,请将*发送给您的同事。
答案 4 :(得分:0)
所以你有一个CarOption&amp;您认为其实是FordOption&amp; ?听起来像是dynamic_cast
运营商的工作。