我正在尝试将实例类分配给指针,我该怎么做:
#include <fstream>
using namespace std;
class A
{
private:
static A *pointer;
protected:
A(){}
A GetInstance()
{
//On this point throw the error: could not convert A::pointer’ from A*’ to ‘A’
pointer& = (A)this;
return pointer;
}
};
A *A::pointer = NULL;
我该怎么做?
static A *pointer;
...
...
pointer& = (A)this;
有可能吗?我正在尝试创建一个简单的存储库类,其中实例化了唯一的连接(只有一次),并且具有虚函数的类存储库(Add,Save,GetById,GetAll())继承自此类,这样我就可以创建一个很多Repository类只使用连接而不是每次都打开和关闭。如果有人有例子,我会很高兴。
先谢谢。
答案 0 :(得分:3)
它并不像您尝试的那样有效,因为(A)this
是从类型A *
(指向类A
的对象的指针)到class A
的转换(类A
)的对象。编译器无法进行这样的转换。
A::pointer
的类型为A *
。 this
方法中的class A
也是如此。
您只需要:
pointer = this;
或者,如果您想提高可读性,可以写:
A::pointer = this;
这样一来,读者明白pointer
是静态属性(类成员)而不是实例属性。
下一行有错误。 A::getInstance()
(return pointer;
)返回的值与方法标题(类A
的对象)中声明的类型不匹配。错误的是方法的声明。返回类型为A
的对象没有多大意义,它应该返回指向这样一个对象的指针(更具体地说,是该类的唯一实例,存储在A::pointer
中。 / p>
更改方法的定义如下:
A *GetInstance()
{
pointer = this;
return pointer;
}
正如其他读者已在评论中注意到的那样,您似乎正在尝试实施Singleton pattern(但您只是在其中途)。关于Singleton的最好建议是避免它,因为它不可测试。它只是一个伪装的全局变量,而全局变量通常是存储数据的一种不好的方式。