有人知道如何让这两个重载操作符共存吗?
#include<iostream>
template< typename T >
class A;
template< typename T >
std::ostream& operator<<( std::ostream& o, const A<T>& e );
template< typename T >
class A
{
A& operator <<( const A& e );
friend std::ostream& operator<< <>( std::ostream& o, const A<T>& e );
};
int main()
{
// program
return 0;
}
// def A<T>::A& A::operator <<( const A& e );
// def std::ostream& operator<< <>( std::ostream& o, const A<T>& e );错误:
$ g++ prov.cpp -o prov
prov.cpp:13:33: error: declaration of ‘operator<<’ as non-function
prov.cpp:13:33: error: expected ‘;’ at end of member declaration
prov.cpp:13:36: error: expected unqualified-id before ‘<’ token我为我糟糕的英语感到抱歉。出于这个原因,我写得很少。
问候和感谢!
发布于 2013-05-02 21:55:07
我认为你想要:
friend std::ostream& operator<< <T>( ... );在朋友声明中。(我不确定:我的策略一直是定义朋友inline,所以它是不是模板并不重要。但这看起来像标准中的示例。)
发布于 2013-09-06 02:03:09
我找到了一个变通的解决方案:
template< typename T >
class A
{
A& operator <<( const A& e );
template< typename T1 >
friend std::ostream& operator<< ( std::ostream& o, const A<T1>& e );
}; 这里有必要重命名typename T,否则您将在类A的作用域内重新声明模板参数,编译器会报错。
https://stackoverflow.com/questions/16339372
复制相似问题