为单例实例调用函数创建别名?

时间:2013-06-28 16:40:42

标签: c++ singleton alias

使用来自的单身人士模式:

C++ Singleton design patternhttp://www.yolinux.com/TUTORIALS/C++Singleton.html

我制作了一个专门的Singleton类,而不是使用其中一个隐藏的类,例如升压::序列化::单例。

我如何为单身人士电话别名?必须写

是非常令人厌烦的

namespace::class::get_instance().method()无处不在

具体如何为namespace::class::get_instance()部分添加别名?

具体来说,我希望能够在堆栈而不是堆上执行此操作,因为公共构造函数,复制构造函数和赋值运算符都已私有化......但似乎无法实现。

使用函数指针对我不起作用。

编辑:不使用宏,因为据我所知,这些宏一般都不赞成。 /我知道typedef,我希望像其他语言一样简单的亲戚,比如

Singleton.method()此外,我在Stackoverflow上看到很少的案例/答案应该是使用#define

的充分理由

这应该从main / usage角度调用库类。

略微相关:How can I make an alias to a singleton function?但我不需要特定的功能。

理想化的例子:

  
    

定义了库LIB。

         

用户:

  

LIB :: server_interface :: get_instance():: do_something()。

说lib表示自动连接池/其他操作。并且你正在与一些服务进行广泛的接口,不得不在前面广泛地提供以下内容是一种痛苦,而不是为了漂亮的代码。此外,作为使用lib的用户,您不希望放置名称空间{

} 在你的代码中我会想。

3 个答案:

答案 0 :(得分:4)

由于引用是对象的别名,您可能需要绑定对实例的引用吗?

namespace::class& sngl_ref = namespace::class::get_instance();
....
sngl_ref.method();

答案 1 :(得分:2)

我想知道你认为单身人士模式是什么。它的使用非常有限,其中某个对象在程序中最多只能存在一次。例如,操纵显示器的程序基本上需要单个显示对象。在这样的程序中创建副本是错误的。 单身人士,至少是IMO,关于数据。如果您的程序在上下文中需要单个数据对象,那么复制该数据将会出错,那么您就拥有了单例的候选者。我迷失了那个get_instance()函数。即使它有许多名称,也应该只有一个实例。

例如,我的书籍包括一个专业的图形窗口对象(请注意,这些图书适用于新手)属于“婴儿围栏”类型。用户可以自由声明游戏围栏'对象'。将它们等复制到它们的内容中,但程序总是包含最多一个数据实例。如果程序中当前不存在游戏围栏对象,则声明将创建必要的基础数据结构。如果已经存在一个围栏对象,则声明一个新的'一个只为现有的名称提供一个新名称(和操作方法)。

你提出问题这一事实非常强烈地表明你正在遭受闪亮的新锤子的伤害。综合症,并试图用它来砸螺丝。

弗朗西斯

答案 2 :(得分:0)

最简单的方法是声明typedef快捷方式:

typedef namespace::class nc;

这会显着减少输入。

另一种方法是在客户端编译单元中使用单元本地方法声明:

namespace
{
    void call_method()
    {
        namespace::class::get_instance().method();
    }

    // Alternatively to shortcut the getInstance() part specifically
    namespace::class& getClassInstance()
    {
        return namespace::class::get_instance();
    }
}