我用通过虚函数的方式写了个dll(如某类A),只在调用的时候通过基类指针绑定这个dll中的类A。由于程序仅通过一次绑定,所以我想问下有没有什么方法使得这个基类指针能不通过虚函数表直接调用类的接口?

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

可以使用模板的静态多态,WTL里就是这样用的,比如

template <class T>
class B1
{
public: 
    void SayHi() 
    {
        T* pT = static_cast<T*>(this);   // HUH?? 我将在下面解释

        pT->PrintClassName();
    }
protected:
    void PrintClassName() { cout << "This is B1"; }
};

class D1 : public B1<D1>
{
    // No overridden functions at all
};

class D2 : public B1<D2>
{
protected:
    void PrintClassName() { cout << "This is D2"; }
};

main()
{
    D1 d1;
    D2 d2;

    d1.SayHi();    // prints "This is B1"
    d2.SayHi();    // prints "This is D2"
}