【发布时间】:2016-01-10 11:12:28
【问题描述】:
这是一种代码 sn-p 应该在 7.1 (VS 2003) 左右的版本上运行。
我无法在 Visual Studio 2013 上编译它。
.h header:
template <HINSTANCE h, DWORD hash, class N>
inline LPVOID testFunc(N n1)
{
...
return ret_func(n1);
}
.cpp:
HINSTANCE kernel32;
int WINAPI WinMain(...)
{
...
kernel32 = GetKernel32();
HINSTANCE mod = testFunc<kernel32, 0x0BADC0DE>("some_string"); // C2975
...
}
错误 C2975:“h”:“testFunc”的模板参数无效,预期的编译时常量表达式
我试过这样:
HINSTANCE kernel32 = GetKernel32(); // implemented ok
HINSTANCE mod = testFunc<kernel32, 0x0BADC0DE>("some_string"); // C2971
错误 C2971:“pushargEx”:模板参数“h”:“kernel32”:局部变量不能用作非类型参数
【问题讨论】:
-
"some_string"是const char[],而不是类。 -
在此上下文中的类意味着“某种类型”而不是通常意义上的类。
-
@Wimmel 所以?它有一个类型。
-
@Wimmel: 不,
class可以,相当于typename。 -
非类型参数类型必须是整型或者指针类型,更别说其他错误了
标签: c++ templates visual-c++ compiler-errors