ここに状況があります。仮想基本クラス(たとえばShapeJuggler
)に、仮想基本クラスオブジェクト(たとえばShape
)への共有ポインタを引数として取り込むメソッドが含まれているとします。C++継承と共有ポインタ
class Shape {
}
class ShapeJuggler {
virtual void juggle(shared_ptr<Shape>) = 0;
}
// Now deriving a class from it
class Square : public Shape {
}
class SquareJuggler : public ShapeJuggler {
public:
void juggle(shared_ptr<Shape>) {
// Want to do something specific with a 'Square'
// Or transform the 'shared_ptr<Shape>' into a 'shared_ptr<Square>'
}
}
// Calling the juggle method
void main(void) {
shared_ptr<Square> square_ptr = (shared_ptr<Square>) new Square();
SquareJuggler squareJuggler;
squareJuggler.juggle(square_ptr); // how to access 'Square'-specific members?
}
make_shared
またはダイナミック/ static_castを仕事をしていないように見えます:理解するには、以下の疑似コードに飛び込むのをしてみましょう。 それはすべて可能ですか?任意のアイデア、提案?
ありがとう
'main()'は 'void'ではなく' int'を返すべきです。 –
"_weは仮想基底クラスを持っています_"あなたの例(または "擬似コード")に**仮想**キーワードを忘れました – curiousguy