【发布时间】:2013-05-17 10:17:31
【问题描述】:
我想通过选择调用给定集合的方法来配置对象在运行时的行为。考虑这个简单的例子:
class Parameter;
class Conf;
class Obj {
public:
Obj( const Conf &t ): t_( t ) {}
void f( Parameter *d );
void f1( Parameter *d );
void f2( Parameter *d );
typedef void ( Obj::*Fn )( Parameter *d );
private:
const Conf &t_;
};
class Conf {
public:
Obj::Fn f;
};
void Obj::f( Parameter *d ) {
( this->*t_.f )( d );
}
通过为给定的Conf 对象更改Conf::f,所有使用此配置的Obj 对象的行为都会发生更改。
第一个问题:这是否类似于某种设计模式(好吧,它是一种方法-指针-策略-事物......)?如果是这样,我应该考虑重新设计吗?
第二个问题:我想通过使用不同的参数类来使其更加灵活。我已经通过使Parameter 成为基类并在fN 方法中进行类型转换来做到这一点,但这看起来不像是最终解决方案。有什么建议吗?
【问题讨论】:
-
策略模式可能在这里起作用。
-
关于您的参数问题,将 Obj 或 Parameter 设为模板类型?
-
考虑使用 std::function 代替方法指针。
-
@verbose-mode 方法
f1()和f2()修改对象的内部状态。策略模式适用于这种情况吗? -
@Spook 你的意思是用
boost::function< void ( Obj*, Parameter* ) > f;的声明替换typedef(我这里还是C++03)?有什么好处?
标签: c++ design-patterns