以下のコード ( ideoneのフル バージョン) では、メソッドへのポインタとContainer::void updateFoo
マップContainer::void updateBar
が登録されていますm_updateMethod
。これらのメソッドは、単にFoo::update
and をBar::update
それぞれ呼び出します。
Foo::update
andを保存することで、この余分なレベルの間接性を回避する方法はあり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;
};