关于模板偏特化

mz02005 2003-06-20 07:22:25
《C++设计新思维》一书中,许多的技术都是基于‘模板偏特化’。但是,我发现手中的c++编译器(vc++7.0)不支持这个特性。请问,最新版本(2003)是否支持该特性,如果答案为否,那么,有内些c++编译器(windows平台)支持它。如果有的话,它是否支持vc的集成开发环境,如果支持的话,怎么设置。

...全文
32 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mz02005 2003-06-23
  • 打赏
  • 举报
回复
多谢 sevencat(七猫), 上次没有仔细看。我这帖准备结了。顺便问一句。vc7.0如何升级到7.1,只能升级到vs2003吗?
mechgoukiteng 2003-06-21
  • 打赏
  • 举报
回复
就我一些很少的实践,vc7.1对偏特化支持的不错了

loki的Type_traits不需要象vc7.0那样用数组模拟了
sevencat 2003-06-21
  • 打赏
  • 举报
回复
http://boost.sourceforge.net/regression-logs/cs-win32_metacomm_experimental.html
sevencat 2003-06-21
  • 打赏
  • 举报
回复
vc7.0及以下都不支持的东西
NO_INCLASS_MEMBER_INITIALIZATION
NO_PRIVATE_IN_AGGREGATE
NO_ARGUMENT_DEPENDENT_LOOKUP
NO_INTEGRAL_INT64_T
NO_MEMBER_TEMPLATE_FRIENDS

//注:下面这个估计就是你说的东西了。
NO_TEMPLATE_PARTIAL_SPECIALIZATION


NO_CV_VOID_SPECIALIZATIONS
NO_FUNCTION_TEMPLATE_ORDERING
NO_USING_TEMPLATE
NO_SWPRINTF
NO_TEMPLATE_TEMPLATES


//这个地方说的是vc6/7的成员模板的一些问题。
// VC++ 6/7 has member templates but they have numerous problems including
// cases of silent failure, so for safety we define:
# define BOOST_NO_MEMBER_TEMPLATES
// For VC++ experts wishing to attempt workarounds, we define:
# define BOOST_MSVC6_MEMBER_TEMPLATES

# if (_MSC_VER > 1200)
# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
# endif

#endif


#if _MSC_VER < 1310 // 1310 == VC++ 7.1
# define BOOST_NO_SWPRINTF
#endif


这个就是最新的版本了,上面的问题都解决了。
#if _MSC_VER <= 1310
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
#endif

他们进行过一个测试的
详情请看
http://boost.sourceforge.net/regression-logs/
各种编译器的测试都有的。
hpho 2003-06-21
  • 打赏
  • 举报
回复
楼上是借boost里的声明来说明问题吧。
mz02005 2003-06-21
  • 打赏
  • 举报
回复
up

这里不谈
BOOST
发言注意主题
sevencat 2003-06-20
  • 打赏
  • 举报
回复
注vc7.1
msc_ver=1310
vc7
msc_ver=1300
vc6
msc_ver=1200
sevencat 2003-06-20
  • 打赏
  • 举报
回复

#if (_MSC_VER <= 1300) // 1200 == VC++ 7.0

#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za
# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
#endif

# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
# define BOOST_NO_PRIVATE_IN_AGGREGATE
# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
# define BOOST_NO_INTEGRAL_INT64_T

// VC++ 6/7 has member templates but they have numerous problems including
// cases of silent failure, so for safety we define:
# define BOOST_NO_MEMBER_TEMPLATES
// For VC++ experts wishing to attempt workarounds, we define:
# define BOOST_MSVC6_MEMBER_TEMPLATES

# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# define BOOST_NO_CV_VOID_SPECIALIZATIONS
# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
# define BOOST_NO_USING_TEMPLATE
# define BOOST_NO_SWPRINTF
# define BOOST_NO_TEMPLATE_TEMPLATES
# if (_MSC_VER > 1200)
# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
# endif

#endif


#if _MSC_VER < 1310 // 1310 == VC++ 7.1
# define BOOST_NO_SWPRINTF
#endif

#if _MSC_VER <= 1310
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
#endif

#if (_MSC_VER >= 1200) && defined(_MSC_EXTENSIONS)
# define BOOST_HAS_MS_INT64
#endif
#if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS)
# define BOOST_HAS_LONG_LONG
#endif
这个是BOOST的头文件里面的,应该说还是比较全的。
可以看出vc7是不支持的,而vc7.1就已经支持了。
不过据regex的库作者说,vc7.1在c++上面还是有些BUG的。
vc7.1好像只是不支持BOOST_NO_MEMBER_TEMPLATE_FRIENDS
snipersu 2003-06-20
  • 打赏
  • 举报
回复
据说vc.net2003极大的遵循了c++的标准,应该会支持的吧!
vc.net好像不支持.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧