如何分配"这个"对象到静态类指针

时间:2016-04-14 09:20:48

标签: c++

我正在尝试将实例类分配给指针,我该怎么做:

#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类只使用连接而不是每次都打开和关闭。如果有人有例子,我会很高兴。

先谢谢。

1 个答案:

答案 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的最好建议是避免它,因为它不可测试。它只是一个伪装的全局变量,而全局变量通常是存储数据的一种不好的方式。