为singleton实例调用函数创建一个别名

Make an alias to the singleton instance calling function?

本文关键字:一个 别名 创建 singleton 实例 调用 函数      更新时间:2023-10-16

使用中的Singleton模式

C++Singleton设计模式和http://www.yolinux.com/TUTORIALS/C++Singleton.html

我制作了一个专门的Singleton类,而不是使用隐藏的类,例如Boost::Serialization::Singleton。

但是,我如何给singleton调用取别名?不得不写真是太烦人了

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

具体来说,我如何对它的namespace::class::get_instance()部分进行别名?

具体来说,我希望能够在堆栈上而不是堆上完成这项工作,因为公共构造函数、复制构造函数和赋值运算符都是私有化的。。。但似乎做不到。

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

编辑:不使用宏,因为据我所知,这些宏通常是不受欢迎的。/我知道typedef,我希望能有一些简单的相对语言,比如

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

这应该是从主/用法的角度调用库类。

稍微相关:如何为singleton函数创建别名?但我不需要一个特定的函数。

理想化的例子:

定义的库LIB。

用户:

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

比如说,所述lib执行自动连接池/其他操作。而且您正在与一些服务进行广泛的接口,必须广泛地准备以下内容是一件痛苦的事情,而且不适合编写漂亮的代码。此外,作为使用lib的用户,您不希望将命名空间{

}我想在你的代码中。

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

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

我想知道您认为singleton模式是用来做什么的。它的用途非常有限,某个对象必须在程序中最多存在一次。例如,操作显示器的程序本质上需要一个显示对象。在这样的程序中创建一个副本是错误的。至少在国际海事组织,单身汉是关于数据的。如果您的程序在一个上下文中需要一个数据对象,在该上下文中复制该数据将是错误的,那么您就有了一个singleton的候选者。我被get_instance()函数弄糊涂了。应该只有一个实例,即使它有多个名称。

例如,我的书包括一个"playpen"类型的专业图形窗口对象(注意这些书是为新手准备的)。用户可以自由声明playpen为"对象"。复制它们等等,但程序总是最多包含一个数据实例。如果程序中当前不存在playpen对象,则声明该对象将创建必要的底层数据结构。如果一个playpen对象已经存在,那么声明一个"新"对象只会为已经存在的对象提供一个新名称(以及操作方法)。

事实上,你问你的问题非常强烈地表明你患有"闪亮的新锤子"综合症,并试图用它来砸螺丝。

Francis

最简单的方法是声明一个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();
    }
}