0

在下面的以下代码(完整版的ideone)中,指向方法的指针Container::void updateFooContainer::void updateBar注册在 map 中m_updateMethod。这些方法简单地分别调用Foo::updateBar::update

Foo::update有没有办法通过存储和来避免这种额外的间接级别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