0

如何在类本身中存储类的对象?

我知道我必须使用 static 关键字来完成我想要的。因此,该类应如下所示:

class my_class {
public:
    static my_class instance;
    my_class() {
        my_class::instance = this
    }
};

下面是出现在类中的确切代码

namespace ArmISA {
    class ISA {
        protected:
            static ISA* isa;
            MiscReg miscRegs[NumMiscRegs];
            const IntRegIndex *intRegMap;
            .....
        public:
            ISA() {
                ISA::isa = this;
                ...
            }
        ...
    };
}

我得到的错误是:

错误:无法将 'ArmISA::ISA::isa' 从 'ArmISA::ISA*' 转换为 'ArmISA::ISA'

4

3 回答 3

1

my_class::instance = *this;会起作用,但我希望您知道,每次创建该类的新实例时,您的instance成员都会被覆盖。此外,这意味着它instance是副本*this而不是参考 - 对一个的更改对另一个是不可见的。

另一种选择是声明instance为指针,在这种情况下,两个指针都引用同一个对象,然后instance = this;编译:

static my_class* instance;

但是,我不确定您到底想达到什么目标。

于 2013-04-09T22:31:06.390 回答
0

this是一个指针。使用my_class::instance = *this.

于 2013-04-09T22:25:58.593 回答
0

要初始化非整数类型的静态成员变量(或在 C++11 中为 non- constexpr),请在类外部执行此操作。

例如:

struct Foo
{
    static Foo bar;
    double x_;
    Foo( double x ): x_( x ) {}
};

// Preferably in an implementation file:
Foo Foo::bar( 3.14 );

类外的声明始终是正式的定义,它为变量提供存储(如果您获取地址则需要)。


如果您想提供仅头文件的模块,另一种方法是通过函数提供对静态变量的访问,如下所示:

struct Foo
{
    static Foo& bar()
    {
        static Foo theBar( 3.14 );
        return theBar;
    }

    double x_;
    Foo( double x ): x_( x ) {}
};

另一种技术是从提供静态变量的类模板继承。

于 2013-04-09T22:33:15.723 回答