前提・実現したいこと
子クラスの関数を親クラスで使いたい。
調べてみて似たような話をかなり見かけたのですが、内容をイマイチ飲み込めなかったので質問させていただいています。
よろしくお願いいたします。
// もう少し実情に即した内容を質問のサンプルコードの後に追記しました。
発生している問題・エラーメッセージ
エラー C3867 'Child::hoge': 非標準の構文です。メンバーにポインタを作成するには '&' を使用してください
といわれたので先頭に&
をつけてみると
エラー C2276 '&': 仮想関数のアドレスを取ろうとしました。
調べてみても分からないことだらけで収拾がつかずにいます。
該当のソースコード
C++
1class Parent 2{ 3private: 4 std::Function<const CString(const CString &)> m_func; 5public: 6 Parent(); 7 8 Parent(std::Function<const CString(const CString &)> func){ 9 m_func = func; 10 }; 11 12 CString Execute(){ 13 return m_func(_T("do it ")); 14 }; 15}; 16class Child : public Parent 17{ 18 Child(){ 19 Parent( this->hoge); 20 }; 21 const CString hoge( const CString &str){ 22 return str + _T(" you sould... may be can!"); 23 }; 24}; 25class CMain(){ 26 Main(){ 27 CString encourage; 28 Child cld; 29 encourage = cld.Execute(); // encourageに"do it you should be can!"が入るようにしたい 30 return; 31 }; 32};
動かないです。何をしたいのかノリだけ伝われば幸いです。
最初省いていましたが、Execute()
はサブスレッドの呼び出し関数ThreadExec
から呼ばれるThreadProc
にあたる関数で、
基底クラスのThreadProc
関数で実行されることの一部を書き換えるのが最終目的です。
よって、cld.Execute();
の実行結果が書き換わるのではなく、Parent
クラス内で呼ばれるExecute
関数の実行結果が変わってほしいのです。
うまく伝わるか分かりませんが最終的な目的は以上です。
補足情報(FW/ツールのバージョンなど)
- Windows7/64bit SP1
- VisualStudio2015SP
- VC++/MFC
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/23 06:22