【发布时间】:2013-05-29 12:35:34
【问题描述】:
我想在模板类定义之外重载输出流操作符<<。
在模板类中实现就可以了:
template
<typename T,int _MaxSize=10,template <class C> class Policy=NoCheck,typename Container=std::vector<T>>
class MyContainer : public Policy<T>
{
public:
MyContainer():p(_MaxSize){};
std::ostream& operator<<(MyContainer<T,_MaxSize,Policy,Container>& obj){ };
private:
Container p;
};
但是当我尝试在模板类之外进行时:
template
<typename T,int _MaxSize=10,template <class C> class Policy=NoCheck,typename Container=std::vector<T>>
class MyContainer : public Policy<T>
{
public:
MyContainer():p(_MaxSize){};
friend std::ostream& operator<<(std::ostream& out,MyContainer<T,_MaxSize,Policy,Container> obj);
private:
Container p;
};
template
<typename T,int _MaxSize,template <class C> class Policy,typename Container>
std::ostream& operator<<(std::ostream& out,MyContainer<T,_MaxSize,Policy,Container> obj)
{
};
编译器抱怨:
warning: friend declaration ‘std::ostream& operator<<(std::ostream&, MyContainer<T, _MaxSize, Policy, Container>)’ declares a non-template function [-Wnon-template-friend]
tempstruct.cc:39:97: note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
谁能举一个简单的例子说明如何在模板类之外定义输出流运算符<<?
在我在这里找到的相关帖子中,每个人都在模板类中执行此操作。
【问题讨论】:
-
停下来想一想:“真的需要
friend吗?” -
@BoBTFish 我不确定答案。我曾经在我的非模板类中将其声明为朋友。
-
它是否使用任何
private成员数据或函数?有必要吗?
标签: c++ templates operator-overloading