嵌套类中的类实例化
class instantiation in nested classes
我有以下问题:
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
的"operator[]
"函数中返回class B
的实例化(其外部class A
的模板参数不同)?
提前感谢。
应该在A<T, N_i...>
之前添加一个typename
,在B< Ts... >
之前添加一个template
。
我的意思
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;
}
// ...
};
}
注。:也可以在c++ 11中使用;
在返回类型的完整类型之前放置typename
是修复您得到的错误的方法。但是,不要把模板形参放在B的后面,因为B总是指向该类型的"当前"实例化。
#include <stdio.h>
using namespace std;
template< typename T, size_t N, size_t... N_i >
struct A
{
// nested class
template< typename... Ts >
class B
{
//...
typename A<T, N_i...>::B operator[]( size_t i )
{
typename A< T, N_i...>::B res{ /* ... */ };
return res;
}
// ...
};
};
https://godbolt.org/g/hsB4pW 相关文章:
- 如何在C++中初始化嵌套类中的2个memeber
- 单独定义模板化嵌套类方法的正确语法
- 如何在 C++ 的外部类构造函数中初始化嵌套类成员
- c++在实现模板化嵌套类时遇到问题
- 访问另一个类中的模板化嵌套类函数和对象
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 在 C 中并行化嵌套循环的几种方法之间的差异,C++使用 OpenMP
- 为什么Clang无法使用默认的Integer_Sequence实例化嵌套的变异模板
- 从QT中的Q_PROPERTY序列化嵌套的用户定义类
- 如何在 cpp 中使用味精包序列化嵌套消息
- 如何初始化嵌套结构数组
- 初始化嵌套向量的大小
- 如何在给定包含类的实例的情况下实例化嵌套类
- 初始化嵌套类中的静态常量成员变量
- 通过反射在XML中的C/C++头文件中定义的可视化嵌套结构/联合
- OpenMP - 并行化嵌套循环
- 在嵌套模板专用化期间初始化嵌套模板类的静态成员
- 通过外部类的实例访问嵌套的内部类
- 如何在C++中初始化嵌套类的构造函数
- 具有可序列化嵌套类的类的序列化奇怪的编译错误