首先,这是这个问题的后续问题:如何删除相似的 const 和非 const 成员函数之间的代码重复?
假设我有一个抽象类,提供一个纯虚函数:
class ICommand
{
public:
virtual ~ICommand() {};
virtual int Execute() = 0;
protected:
ICommand() {};
};//class ICommand
另一个继承自这个的类:
class cCommand : public ICommand
{
public:
cCommand() {};
virtual ~cCommand() {};
virtual int Execute()
{
int retval = 0;
//do something and return appropriate error code
return retval;
}
};//class cCommand
现在我需要一个指向 ICommand 类型对象的指针,但需要使用 const 数据,例如:
//using a smart pointer here would be better, but it shows the problem
ICommand const * p = new cCommand();
int retval = p->Execute(); //won't compile
问题是,我在 const 对象上调用了非 const 成员函数。所以我要么必须在创建指针 p 时删除 const (不好,我猜......),要么我必须向 ICommand 添加一个 const 成员函数 Execute() 。在对用户必须实现两个函数而不是(更不用说会发生什么,如果我们向基类添加一些其他纯虚函数......)这一事实进行了一点挣扎之后,我想出了以下解决方案:
class ICommand
{
public:
virtual ~ICommand() {};
virtual int Execute()
{ //Scott Meyers way
return static_cast<const ICommand&>(*this).Execute();
}
virtual int Execute() const = 0;
protected:
ICommand() {};
};//class ICommand
这似乎做得很好,但我不确定这是否适合解决我的问题。我也不认为这对用户来说非常直观,因为他总是必须实现纯虚成员函数的 const 版本,而不是非 const 版本。
我的实际问题是,是否有任何我可能没有考虑过的副作用,或者到目前为止我可能已经监督了这个问题是否有更好的解决方案。
在此先感谢,勒内。