0

base私は 3 つのクラスを持っています: 最初は、派生クラスを持つ純粋な仮想基本クラス derived1derived2...

2番目 fooは、基本クラスへのスマートptrを保持します

3 番目はスマート ptr を保持しfoo、オーバーロードされたメンバー関数を持ちます。これは、foo の ptr が指す派生クラスに依存する必要があります。

これが作業コードです

#include<iostream>
#include<boost/shared_ptr.hpp>

using namespace std;

class base{
public:
    base(){}
    ~base(){}
    virtual void FuncDer()=0;
};

class derived1 : public base{
    derived1(){}
    virtual void FuncDer(){
    cout<<"derived function1!"<<endl;
    }
};

class derived2 : public base{
    derived2(){}
    virtual void FuncDer(){
        cout<<"derived function2!"<<endl;
}
};

class foo {
public:
   foo();
    ~foo();
    boost::shared_ptr<base> get_base_ptr(){
        return base_obj;
    }
private:
    boost::shared_ptr<base> base_obj;
};

class bar {
public:
    bar();
    ~bar();
    void callfunc(){
    func(foo_ptr->get_base_ptr());
    }
private:
    boost::shared_ptr<foo> foo_ptr;
    void func(boost::shared_ptr<derived1>);
    void func(boost::shared_ptr<derived2>);
};


int main()
{
    cout<<"test"<<endl;

    return 0;
}

ただし、これは一致するメンバー関数がないというエラーで失敗するようです。したがって、私の質問は、第一に、このアプローチに明らかに問題があるかどうか、第二に、このタイプの問題をより適切に処理する、より効率的な/オブジェクト指向の設計アプローチがあるかどうかです。

4

1 に答える 1