如何使用以下代码:
#include <array>
#include <iostream>
template<typename T>
class MyClass;
template<typename T, size_t N>
MyClass<T> myFun( const std::array<T, N>& a );
template<typename T>
class MyClass
{
MyClass( size_t n )
{ std::cout << "Ctor with n = " << n << '\n'; }
template<size_t N>
friend MyClass<T> myFun<T, N>( const std::array<T, N>& a );
};
template<typename T, size_t N>
MyClass<T> myFun( const std::array<T, N>& a )
{
return MyClass<T>( N );
}
int main()
{
std::array<int, 3> a;
myFun( a );
return 0;
}
gcc不喜欢template<size_t N>
声明前面的friend
:
错误:在主模板朋友MyClass myFun(const std :: array&amp; a);
的声明中无效使用template-id'myFun'答案 0 :(得分:2)
您只需将模板的前向声明复制到friend
声明中:
template<typename T>
class MyClass
{
MyClass( size_t n )
{ std::cout << "Ctor with n = " << n << '\n'; }
template<typename T1, size_t N>
friend MyClass<T1> myFun( const std::array<T1, N>& a );
};