我有一个class RO
有方法的父母void setup(const int* p)
。我需要一个孩子class RW
有相同的方法,只允许非常量指针。
我通过在其中创建两种方法class RO
并禁止其中一种方法来做到这一点class RW
:
class RO
{
public:
void setup(int* p) { DO SMTH }
virtual void setup (const int* p) { RO::setup( const_cast<int*>(p) ); }
// the rest...
void read() const;
};
class RW : public RO
{
public:
virtual void setup (const int* p) { throw SMTH }
// the rest...
void write();
};
我希望能够RW::setup
在编译时尽可能禁止。IE,
const int* p;
RO* ro = new RW;
ro->setup(p); // Throw at run time, since it can be unknown
// at compile time that ro points to RW and not to RO.
RW* rw = new RW;
rw->f(p); // Disallow this at compile time, since it is
// known at compile time that rw points to RW.
有没有办法做到这一点?