C++ 是否为singleton实例调用函数创建别名?

C++ 是否为singleton实例调用函数创建别名?,c++,singleton,alias,C++,Singleton,Alias,使用以下单例模式: 及 我创建了一个专门的Singleton类,而不是使用一个隐藏类,例如Boost::Serialization::Singleton 但是,我怎样才能给这个单例调用取别名呢?不得不写作是很烦人的 namespace::class::get_instance.method everywhere 具体地说,我如何为namespace::class::get_实例部分命名 具体地说,我希望能够在堆栈上而不是堆上执行此操作,因为公共构造函数、复制构造函数和赋值操作符都是私有化的。。。

使用以下单例模式:

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

但是,我怎样才能给这个单例调用取别名呢?不得不写作是很烦人的

namespace::class::get_instance.method everywhere

具体地说,我如何为namespace::class::get_实例部分命名

具体地说,我希望能够在堆栈上而不是堆上执行此操作,因为公共构造函数、复制构造函数和赋值操作符都是私有化的。。。但似乎无法做到

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

编辑:据我所知,一般不赞成使用宏我知道typedef,我希望在其他语言中,比如

方法我还看到了很少关于Stackoverflow的案例/答案,它们应该是使用define的好理由

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

稍微相关:但我不需要一个特定的功能

理想化示例:

已定义的库库库

用户:

LIB::server\u interface::get\u instance::do\u something

假设所述lib执行自动连接池/其他操作。而且,您正在与一些服务进行广泛的接口,必须大量地预先编写以下内容是一件痛苦的事情,并且不会产生漂亮的代码。此外,作为使用lib的用户,您不希望将名称空间{

}
在您的代码中,我认为。

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

因为引用是对象的别名,所以您可能需要将引用绑定到实例

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

我想知道你认为单身模式是为了什么。它的用途非常有限,某些对象在程序中最多只能存在一次。例如,操纵显示的程序本质上需要一个显示对象。在这样的程序中创建一个副本是错误的。 至少在我看来,单身汉是关于数据的。如果您的程序需要一个单一的数据对象,在这种情况下,复制该数据将是一个错误,那么您就有了一个单一对象的候选对象。我被get_实例函数弄糊涂了。应该只有一个实例,即使它有许多名称

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

你问问题的事实强烈表明你患有“闪亮新锤子”综合症,并试图用它来砸螺丝


弗朗西斯

不清楚你想做什么。你能写一段你希望你的代码是什么样子的代码吗?不要写单例定义我的单例名称空间::类::get_instance@Praetorian通常我认为预处理器宏是一个坏主意,通常我认为单身是个坏主意。