我有这个类定义(在这里简化),用VS2008编译得很好。在VS2017中,我在第一个尖括号上得到语法错误C2059:
template < typename Function, typename Base, typename Specialiser = Base >
class FunctionTermBase : public Base
{
public:
// typedef typename Function::result_type result_type;
typedef typename Base term_type;
typedef typename Specialiser specialiser;
protected:
FunctionTermBase() { }
public:
template <typename T>
struct Specialise {
typedef typename specialiser::Specialise<T>::type type;
};
};
如果有人能告诉我这段代码有什么问题,我会很感激吗?
答案 0 :(得分:3)
您必须使用template
关键字来指示以下相关名称也具有模板参数。此外,typename
中不需要typedef
,因为已知标识符是类型(它们是模板参数)。
template < typename Function, typename Base, typename Specialiser = Base >
class FunctionTermBase : public Base
{
public:
// typedef typename Function::result_type result_type;
typedef Base term_type;
typedef Specialiser specialiser;
protected:
FunctionTermBase() { }
public:
template <typename T>
struct Specialise {
typedef typename specialiser::template Specialise<T>::type type;
// Add template here ^^^^^^^^
};
};