为singleton实例调用函数创建一个别名
Make an alias to the singleton instance calling function?
使用中的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();
}
}
- 别名一个模板函数,该功能没有参数可更简洁
- 成员模板别名与另一个模板成员
- 如何在C 中为多个类创建一个别名
- 创建一个从一种类型到另一种类型的别名
- 将预定但非初始化的向量设置为另一个别名
- 如何在c中给出一个函数的别名
- 依赖于参数的查找在来自另一个命名空间的别名类型上意外行为
- 如何使用模板别名删除一个不必要的参数
- C++11中一个专用模板的名称别名
- 专用模板是命名空间别名实际上是一个别名
- 从成员函数指针到另一个类型的强制转换,返回严格的别名问题
- 一个命名空间有多个别名
- 是否可以在googleprotobuf中为类型(枚举或消息)定义一个别名
- 为singleton实例调用函数创建一个别名
- 将参数包从一个模板复制到另一个模板,并在内部别名中同时使用结果
- 我可以用别名模板专门化一个类模板吗?
- 能否在c++中向前声明一个命名空间别名?
- 一个空的别名shared_ptr是一个很好的替代无操作删除shared_ptr吗?
- 模板别名为另一个别名
- 将两个目录合并到一个虚拟目录中用于编译/别名包含目录