我有以下代码,
class ODBCFuncCall // Line 67
{
public:
ODBCFuncCall(SQLHANDLE stmt, SQLHANDLE conn) : m_stmt(stmt), m_conn(conn) {}
virtual ~ODBCFuncCall() {}
template <typename... A>
void RunStatementFunction(SQLRETURN (*in_func)(SQLHSTMT, A...), A... args)
{
in_func(m_stmt, args...);
}
virtual const char* GetFunctionName() = 0;
virtual void Setup() = 0;
virtual void Run() = 0;
virtual void Cleanup() = 0;
protected:
const SQLHANDLE m_stmt;
const SQLHANDLE m_conn;
};
我正在尝试使用VS2012 SP4进行编译。完全否定了,这是我遇到的错误的一个示例:
Error 6 error C2059: syntax error : ')' \ODBCTask.h 75
Error 4 error C2065: 'A' : undeclared identifier \ODBCTask.h 75
Error 2 error C2065: 'in_func' : undeclared identifier \ODBCTask.h 75
Error 5 error C2143: syntax error : missing ')' before '...' \ODBCTask.h 75
Error 1 error C2143: syntax error : missing ',' before '...' \ODBCTask.h 74
Error 7 error C2238: unexpected token(s) preceding ';' \ODBCTask.h 80
Error 3 error C2275: 'SQLHSTMT' : illegal use of this type as an expression \ODBCTask.h 75
当我注释掉“RunStatementFunction”时,它编译良好。
通过对类似的东西进行谷歌搜索可以发现语法对我来说是正确的...
最佳答案
是的,这是正确的:see it in action on ideone。
可变参数模板仅在使用2012年11月CTP时在VS 2012中可用。那引入了一个单独的工具集,必须在项目属性中选择它。它应该这样编译。