我有以下代码:
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 < ...可以进行比较.
你需要一个typename和一个template:
template <typename Provider>
inline void use()
{
typedef typename Provider::template Data<int> D;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |