【发布时间】:2011-02-23 15:58:45
【问题描述】:
是否可以在预处理指令中使用非类型常量模板参数?这是我的想法:
template <int DING>
struct Foo
{
enum { DOO = DING };
};
template <typename T>
struct Blah
{
void DoIt()
{
#if (T::DOO & 0x010)
// some code here
#endif
}
};
当我尝试使用 Blah<Foo<0xFFFF>> 之类的东西时,VC++ 2010 抱怨我们尝试使用 #if 的行中括号不匹配。我猜预处理器对模板一无所知,而这种事情不在它的领域。说啥?
【问题讨论】:
-
请注意:
Blah<Foo<0xFFFF>>不会在当前 c++ 中解析,您需要在>s 之间留一个空格。Blah<Foo<0xFFFF> >. -
实际上,在 VC++ 2010 中它确实可以编译! :) 他们在 VC++ 2010 中部分实现了 C++0x。
标签: c++ templates c-preprocessor preprocessor-directive