C++ 嵌套类中的类实例化
我有以下问题:C++ 嵌套类中的类实例化,c++,templates,c++14,variadic-templates,C++,Templates,C++14,Variadic Templates,我有以下问题: 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...
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
{
//嵌套类
模板
B类
{
//...
A::B运算符[](大小i)
{
A:Bres{/*…*/};
返回res;
}
// ...
};
};
不幸的是,编译器为“A::Bres{/*…*/};
”产生了一个错误。有人知道我如何在类B
的函数“操作符[]
”中返回类B
的实例化(其外部类A
的模板参数不同)
非常感谢。在返回类型的完整类型之前放置一个
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;
}
// ...
};
};
#包括
使用名称空间std;
模板
结构A
{
//嵌套类
模板
B类
{
//...
typename A::B运算符[](大小i)
{
类型名A::B res{/*…*/};
返回res;
}
// ...
};
};
在
a
之前添加typename
和模板在B代码>
我是说
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;
}
// ...
};
}
模板
结构A
{
//嵌套类
模板
B类
{
//...
typename A::模板B运算符[](大小i)
{
typename A::模板Bres{/*…*/};
返回res;
}
// ...
};
}
附言:也应使用C++11;不仅是C++14对不起,我也不太明白;回答中的操作符[]
返回什么?是A::B
还是A::B
?如果我理解正确,OP要求一个A::B
再次抱歉:“将名称空间
放在完整类型之前”是指“将类型名
放在完整类型之前”吗?