- C++相談室 part113
639 :デフォルトの名無しさん[]:2014/07/29(火) 00:29:20.53 ID:amKy8C2I - >>637
目的は委譲というより反変引数を取ることです。 例えば極端な例ですがこんな感じです。 int Function( Base& ); int (*pointer)( Derived& ) = Function; DerivedはBaseの派生型です。 pointerとFunctionは引数は異なりますが、 pointerとFunctionの引数は親子関係がある為 安全にFunctionをpointerに代入できる(反変性)筈です。 (C++の場合は引数のOffsetを計算するため単純にはできません。) 方法は選びませんので、 もし無名高階関数で簡単に対応出来るのでしたら、 方法をご教示ください。
|
- 【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
123 :デフォルトの名無しさん[sage]:2014/07/29(火) 00:30:44.81 ID:amKy8C2I - いまSmalltalkが地味に流行っとるな。
|
- C++相談室 part113
642 :デフォルトの名無しさん[]:2014/07/29(火) 00:58:51.78 ID:amKy8C2I - >>640
int FunctionA( BaseA& ); int FunctionB( BaseB& ); int ( *pointer[2] )( Derived& ) = { FunctionA, FunctionB }; こんな感じでBaseが複数有るのでそれは無理ですね。
|
- C++相談室 part113
646 :デフォルトの名無しさん[]:2014/07/29(火) 01:27:11.06 ID:amKy8C2I - >>643
struct FactoryForButton { virtual Button *CreateButtonFor( LabelModel* ) = 0; }; struct FactoryForTextBox { virtual TextBox *CreateTextBoxFor( TextModel* ) = 0; }; class ConcreateTextModel:public virtual TextModel { /* 省略 */ public: Component *CreateBy( FactoryForText& ); /* 他省略 */ }; class ConcreateFactory: public virtual FactoryForText, public virtual FactoryForButton { /* Create系の実装 */ }; struct ExampleModel { virtual Component *CreateBy( ConcreateFactory& ) = 0; }; std::vector<ExampleModel> array; array.push_back( new ConcreateTextModel() );
|