如何在C++中自动将代码添加到派生函数中

Ian*_*Ian 2 c++

我的代码用于管理网络客户端和服务器上的操作,因为两者之间存在显着的重叠.但是,这里和那里有一些函数意味着由客户端或服务器专门调用,并且意外调用服务器上的客户端函数(反之亦然)是错误的重要来源.

为了减少这些编程错误,我试图标记函数,以便在它们被滥用时引起骚动.我当前的解决方案是每个函数启动时的一个简单宏,如果客户端或服务器访问不应该访问的成员,则调用断言.但是,当存在多个派生类的实例时,这会遇到问题,因为我必须在每个子类中将实现标记为客户端或服务器端.

我希望能够做的是在基类中的虚拟成员的签名中放置一个标记,这样我只需要标记一次而不会因忘记重复执行而导致错误.我认为把基类实施检查,然后参照它的东西,如基地:: functionName,而但运行到同一问题尽量为需要函数调用手动添加到每个执行.理想情况下,我可以像默认构造函数那样自动调用函数的父版本.

有人知道如何用C++实现这样的东西吗?我应该考虑采用另一种方法吗?

谢谢!

Gre*_*ill 5

另一种方法可能是覆盖与调用者实际调用的方法不同的方法:

class Base {
public:
    void doit(const Something &);
protected:
    virtual void real_doit(const Something &);
};

class Derived: public Base {
protected:
    virtual void real_doit(const Something &);
};
Run Code Online (Sandbox Code Playgroud)

执行Base::doit()可以进行检查以确保在正确的环境中调用它,然后调用虚real_doit()函数.派生类将覆盖受保护的虚函数,并且任一类的用户都无法调用受保护的函数.

Base::doit()函数不是虚拟的,因此派生类不会意外地覆盖错误的类.(人们可以尝试,但希望他们很快就会注意到它没有被调用.)