0

以下のコード ( ideoneのフル バージョン) では、メソッドへのポインタとContainer::void updateFooマップContainer::void updateBarが登録されていますm_updateMethod。これらのメソッドは、単にFoo::updateand をBar::updateそれぞれ呼び出します。

Foo::updateandを保存することで、この余分なレベルの間接性を回避する方法はありBar::updateますか?

class Foo
{
public:
    void update( )
    {
        std::cout << "Updating Foo ..." << std::endl;
    }
};

class Bar
{
public:
    void update( )
    {
        std::cout << "Updating Bar ..." << std::endl;
    }
};

class Container
{
public:
    typedef void (Container::*updateMethod)();
    typedef std::map<std::string , updateMethod> UpdateMethodMap;

    static const UpdateMethodMap    m_updateMethod;
    static UpdateMethodMap          initializeUpdateMethodMap();
    static updateMethod             getUpdateMethod( const std::string attributeName );

    void update( const std::string name )
    {
        updateMethod updater = getUpdateMethod( name );
        if( updater )
        {
            (this->*updater)();
        }
    }

    void updateFoo()
    {
        m_foo.update();
    }

    void updateBar()
    {
        m_bar.update();
    }

private:    
    Foo m_foo;
    Bar m_bar;
};
4

0 に答える 0