我有以下问题:
template< typename T, size_t N, size_t... N_i >
struct A
{
// nested class
template< typename... Ts >
class B
{
//...
A<T, N_i...>::B< Ts... > operator[]( size_t i )
{
A< T, N_i...>::B< Ts... > res{ /* ... */ };
return res;
}
// ...
};
};
不幸的是,编译器产生“A < T, N_i...>::B < Ts... > res{ /* ... */ };
”错误。有谁知道我如何返回 class B
的实例(其外部 class A
的模板参数不同)在 operator[]
的函数“class B
”中?
提前非常感谢。
最佳答案
添加 typename
就足够了之前A<T, N_i...>
和一个 template
之前B< Ts... >
.
我是说
template< typename T, size_t N, size_t... N_i >
struct A
{
// nested class
template< typename... Ts >
class B
{
//...
typename A<T, N_i...>::template B< Ts... > operator[]( size_t i )
{
typename A< T, N_i...>::template B< Ts... > res{ /* ... */ };
return res;
}
// ...
};
}
P.s.:也应该适用于 C++11;不仅仅是 C++14
关于c++ - 嵌套类中的类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065561/