gpt4 book ai didi

c++ - 使用静态函数访问单例

转载 作者:行者123 更新时间:2023-11-30 05:10:02 24 4
gpt4 key购买 nike

假设我有一个单例类 Foo。这里的问题不是单例成语的实现方式,那我就不明说了。我有这样的东西:

class Foo
{
private:
Foo();
~Foo();
public:
void doSomething();
int getSomething() const;
public:
static Foo& getInstance();
};

然后,在我看来,经典的调用方式如下:

Foo::getInstance().doSomething();
int i = Foo::getInstance().getSomething();

总是必须编写 Foo::getInstance() 来访问实例并执行预期的任务,这非常烦人。那么我的问题如下:如何将重复函数作为静态函数,保持单例机制,但缩短访问时间?

class Foo
{
private:
Foo();
~Foo();
public:
void doSomething();
int getSomething() const;
public:
static Foo& getInstance();
static void _doSomething() { Foo::getInstance().doSomething(); }
static int _getSomething() { return Foo::getInstance().getSomething(); }
};

然后,我可以用这个较短的版本调用它:

Foo::_doSomething();
int i = Foo::_getSomething();

这很常见吗?是否有充分的理由不这样做(以及为什么)?是否有其他(更好的)方法来简化对单例类的调用?

注意:出于兼容性原因,我不使用 C++11。

最佳答案

其他静态方法没有任何问题,可以缩短调用单例的其他方法的时间。

如果另一个类频繁调用单例的方法,则考虑在另一个类中对单例的私有(private)成员引用,该引用将在构造该类时设置(假设您的单例已在另一个对象构造之前构造)。

class Bar{

private:
Foo& fooRef;
void doA();


public:
Bar();
~Bar();
};

然后在构造函数中:

Bar() :
fooRef(Foo::getInstance())
{}

现在为了便于在 Bar::doA() 中使用,您可以调用:

void Bar::doA(){
fooRef.doSomething();
}

而且我知道您说过您的问题不是关于单例实现,但我想我会把它扔进去并说不要忘记阻止单例的复制构造和赋值。

关于c++ - 使用静态函数访问单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45863713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com