我们正在从VS2005迁移到VS2015,相同的代码在VS2005中编译得很好,但在VS2015中抛出一个错误"'F':非类型模板参数'F'的非法类型"
#define DLLEXPORT __declspec (dllexport)
template <class DLLEXPORT F> class DLLEXPORT QWCalloutManager {
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
有什么帮助吗??
您需要重写为:
#define DLLEXPORT __declspec (dllexport)
template <class F> class DLLEXPORT QWCalloutManager {
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
没有办法说F
必须是一个导出类(除非你可以为它写一个静态断言)。你只需要在代码审查中检查它。
也许vs2005没有抱怨,但template <class __declspec (dllexport) F> class ...
不是有效的msvc++语法。
尝试从模板参数中删除DLLEXPORT
。
#define DLLEXPORT __declspec (dllexport)
template <class F> class DLLEXPORT QWCalloutManager {
};