访问静态函数
问题描述:
考虑我有一个单独的类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();
它是常见的?有没有很好的理由不这样做(以及为什么)?是否有其他(更好的)方法来简化对单例类的调用?
注:我不使用下的兼容性原因++ 11。
答
没有什么错与其他静态方法,它缩短打电话给你单身的其他方法。
如果另一个类经常调用单例的方法,那么考虑一个私有成员对另一个类中的单例的引用,它将在构造该类时被设置(假设你的单例已经在另一个对象的构造之前被构造)。
class Bar{
private:
Foo& fooRef;
void doA();
public:
Bar();
~Bar();
};
然后在构造函数中:
Bar() :
fooRef(Foo::getInstance())
{}
而现在为了便于在酒吧:: DOA(使用)的您可以拨打:
void Bar::doA(){
fooRef.doSomething();
}
而且我知道你说你问题不是关于单例实现,而是我认为我会抛出这个问题,并说不要忘记阻止单身人员的复制构造和分配。
你有没有考虑像'汽车及实例=富::的getInstance(); instance.doSomething(); instance.getSomething();'? –
@FrançoisAndrieux:是的,当然。如果在同一个范围内多次调用单例,那么这是有效的。我想到几个范围内的电话。但这是一个很好的观点。 – Caduchon
@FrançoisAndrieux'auto'是OP所说的他不能使用的C++ 11关键字。 – muXXmit2X