Идеи для упрощения проектирования / устранения уровня косвенности в вызовах методов
В следующем фрагменте кода ниже (полная версия ideone) указатели на методы Container::void updateFoo
а также Container::void updateBar
зарегистрированы на карте 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;
};