在下面的以下代码(完整版的ideone)中,指向方法的指针Container::void updateFoo
和Container::void updateBar
注册在 map 中m_updateMethod
。这些方法简单地分别调用Foo::update
和Bar::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;
};