我想知道(在C ++中)你是否可以实例化一个类(类foo)然后让所述类返回已经实例化的对象。 (FOO ::实例())
换句话说,我可以让一个类通过它自己的方法返回它吗?我希望能够在程序的早期创建一个类(即类foo),因此它已经设置好并准备好了。然后,在该行的更远处,我希望能够从该类调用函数,而不必将该对象作为参数传递给我的调用函数。我可以这样做吗:
MyClass::ReturnSelf()->foo();
要么
MyClass::ReturnSelf().foo();
答案 0 :(得分:4)
struct X
{
static X& instance()
{
static X x;
return x;
}
void foo();
};
并将方法调用为:
X::instance().foo();
当然,你也可以制作方法static
,如果这是一个选项,并直接调用它:
X::foo(); //this requires foo to be declared static
从方法返回实例的效果也可用于方法链接:
struct Element
{
Element& setColor() { return *this; }
Element& setWidth() { return *this; }
};
Element e;
e.setColor().setWidth();
答案 1 :(得分:0)
static
成员函数通常可以解决问题:
struct Foo
{
static Foo & special_instance()
{
static Foo impl; // Alarm bells: This is a global state!
return impl;
}
// ...
};
用法(来自代码中的任何位置):
Foo & f = Foo::special_instance();
// ...
您还可以选择创建类private
的所有构造函数,以便此类对象创建是 only 选项。这通常是笨拙的设计,但可能存在有用的情况。请注意你是否正确地模拟你的问题,或者你是否可以使用更简单的东西。
答案 2 :(得分:0)
我刚才意识到这可能有点不清楚。我希望能够让另一个类调用这个“自返回”方法,这样它就可以使用已经实例化的对象的方法和成员,而无需创建新对象。
在foo类foo中定义一个类变量,可以在静态类方法instance()中返回。你也可以尝试给它输入* foo并用第一个ctor上的指针设置它,这样就可以从你的班级派生出来。
class Foo
{
# class variable pointing to first instance
static foo* pFoo = null;
# constructor, sets pointer to first instance
Foo()
{
if (!pFoo) pFoo = this;
/* ... */
}
# static class method returning instance
static foo* instance() {return pFoo;}
}