我想创建一个泛型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)
简短回答:
C++模板为您提供编译时的通用性,而不是运行时的通用性.
模板本身在您的程序中不存在(即具体的二进制可执行文件).只有在通过显式或隐式指定其参数进行实例化时,它们才会以生成的代码结束.
所以,这不会声明变量:
AIT aa;
Run Code Online (Sandbox Code Playgroud)
这声明了一个变量:
AIT<A> aa;
Run Code Online (Sandbox Code Playgroud)
如果需要运行时通用性,则必须使用运行时调度机制:
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |