如何在类本身中存储类的对象?
我知道我必须使用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'
答案 0 :(得分:1)
my_class::instance = *this;
可以使用,但我希望你知道每次创建一个新的类实例时,你的instance
成员都会被覆盖。此外,这意味着instance
是*this
的副本,而不是参考 - 对另一个的更改对另一个是不可见的。
另一种选择是将instance
声明为指针,在这种情况下,两个指针都引用同一个对象,然后instance = this;
将编译:
static my_class* instance;
但是,我不确定你到底想要达到的目标。
答案 1 :(得分:0)
this
是一个指针。使用my_class::instance = *this
。
答案 2 :(得分:0)
要初始化非整数类型的静态成员变量(或者,在C ++ 11中,非 - 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 ) {}
};
另一种技术是从提供静态变量的类模板继承。