模板化类定义不在VS2017中编译

时间:2017-05-30 20:10:58

标签: c++ templates

我有这个类定义(在这里简化),用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;
    };
};

如果有人能告诉我这段代码有什么问题,我会很感激吗?

1 个答案:

答案 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 ^^^^^^^^
    };
};