通用var c ++

0 c++ generics var

我想创建一个泛型var,可以来自一个类或另一个类.

在这个代码示例中,我希望var是通用的,因此在我的代码中,我可以访问A类或B类的代码.

但是必须是全球性的.

你可以帮帮我吗?

class MyClass
{
public:
    MyClass() {} //contructor padrão, não deve ser utilizado isoladamente

    static MyClass* getInstance()
    {
        static MyClass *instance = 0;
        if (!instance) instance = new MyClass();
            return instance;
    }
};

class A : public MyClass
{
public:
    int a() { return 1; }
};

class B : public MyClass
{
public:
    int b() { return 1; }
};

template <class TAIT> class AIT
{
public:
    static TAIT& Instance()
    {
        static TAIT instance;
        return instance;
    }
};

AIT aa;

void main()
{
    aa.Instance().a(); // or
    aa.Instance().b(); // aa could be class
                       // A or class B. So I could access
                       // function a or function b (not at same
                       // time, of course)

    return;
}
Run Code Online (Sandbox Code Playgroud)

blt*_*txd 7

简短回答:

C++模板为您提供编译时的通用性,而不是运行时的通用性.

模板本身在您的程序中不存在(即具体的二进制可执行文件).只有在通过显式或隐式指定其参数进行实例化时,它们才会以生成的代码结束.

所以,这不会声明变量:

AIT aa;
Run Code Online (Sandbox Code Playgroud)

这声明了一个变量:

AIT<A> aa;
Run Code Online (Sandbox Code Playgroud)

如果需要运行时通用性,则必须使用运行时调度机制:

  • 或者用开关盒手动完成.
  • 或者更好地使用公共基类的内置继承+一些虚方法.