无法引用嵌套在模板参数中的模板名称

chi*_*ila 8 c++

我有以下代码:

template <typename Provider>
inline void use()
{
    typedef Provider::Data<int> D;
}
Run Code Online (Sandbox Code Playgroud)

我基本上试图使用一些'Provider'类的模板类成员'Data',应用于'int',但是我得到以下错误:

util.cpp:5: error: expected init-declarator before '<' token
util.cpp:5: error: expected `,' or `;' before '<' token
Run Code Online (Sandbox Code Playgroud)

我在Solaris系统上使用GCC 4.3.3.

sbi*_*sbi 16

typedef typename Provider::template Data<int> D;
Run Code Online (Sandbox Code Playgroud)

问题是,当编译器use()第一次解析时,它不知道Provider,因此它不知道Provider::Data引用了什么.它可以是静态数据成员,成员函数的名称或其他内容.这就是你必须放入的原因typename.只要嵌套名称是模板的名称,就需要
附加template内容.如果它是别的东西,那么Data < ...可以进行比较.


Jam*_*lis 8

你需要一个typename和一个template:

template <typename Provider>
inline void use()
{
    typedef typename Provider::template Data<int> D;
}
Run Code Online (Sandbox Code Playgroud)