wanminny 发表于 2010-5-5 11:03:10

这个用法

template ACE_Singleton<ACE_Reactor, ACE_Null_Mutex> * ACE_Singleton<ACE_Reactor, ACE_Null_Mutex>::singleton _;

什么意思?

modern 发表于 2010-5-6 10:38:07

楼主从哪搞的这段代码?
不像ACE的源代码吧。

ACE_Reactor本身就是单件,
再用ACE_Singleton单件模板包装一下,
没啥意义吧?

acedev 发表于 2010-5-6 11:36:07

回复 #2 modern 的帖子

APG 教程95页 第2行 例7-57.2.1同时使用接受器和连接器 一节也有这个用法

modern 发表于 2010-5-6 11:42:59

你说的两个地方我都没有发现呀、、、

acedev 发表于 2010-5-6 12:31:42

回复 #4 modern 的帖子

ACE_wrapper 里的 examplesC++NPv2_TPLSTP_Logging_Server.cpp 67行

modern 发表于 2010-5-6 13:38:37

明明是C++NPv2。
代码我帮你贴出来了,你的问题一直没有上下文,别人很难分析的。
#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
template ACE_Singleton<TP_Logging_Task, ACE_Null_Mutex> *
ACE_Singleton<TP_Logging_Task, ACE_Null_Mutex>::singleton_;
template ACE_Unmanaged_Singleton<TP_Logging_Task, ACE_Null_Mutex> *
ACE_Unmanaged_Singleton<TP_Logging_Task, ACE_Null_Mutex>::singleton_;
#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */

看似模版静态成员的初始化,
应该是在特定模版实现的编译器下的语法吧。
至少在VC下是不生效的代码。

modern 发表于 2010-5-6 13:40:16

另,不知道楼主最开始的代码源自何处,
因为ACE_Reactor本身实现即为单件因此,不要这样用,
其他的类使用ACE_Singleton达到
双重加锁单件的效果是十分方便的。

modern 发表于 2010-5-6 13:48:13

看了你问我的其他的帖子,
感觉楼主应该是对STL不太了解吧。
还是先找几本经典的介绍STL的书籍补一下基础知识吧。

wanminny 发表于 2010-5-6 15:18:51

代码是在      ACE-5.7.7\ACE_wrappers\examples\Logger实例中的。。确实对模版这类东西比较晕。
页: [1]
查看完整版本: 这个用法