考虑我有一个单例类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。
答案 0 :(得分:1)
其他静态方法没有任何问题,可以缩短调用单例的其他方法。
如果另一个类经常调用单例的方法,那么考虑一个私有成员对另一个类中的单例的引用,这个单元将在构造该类时被设置(假设你的单例已经构造在另一个对象之前) #39;建设)。
class Bar{
private:
Foo& fooRef;
void doA();
public:
Bar();
~Bar();
};
然后在构造函数中:
Bar() :
fooRef(Foo::getInstance())
{}
现在为了便于在Bar :: doA()中使用,您可以致电:
void Bar::doA(){
fooRef.doSomething();
}
而且我知道你说你的问题不是关于单身人员的实施,但是我想我会把它扔进来并说不要忘记防止复制构造和单身人士的分配。