テンプレートクラス内で定義したフレンド関数を外に出したい。
Posted: 2010年5月05日(水) 19:30
久々に質問します。
以下のようなテンプレートクラス(抜粋)を作っています。
その中にあるフレンド関数をクラスの外に出したいです。
どのようにすればいいでしょうか?
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
template<typename T>
class vec
{
private:
std::vector<T> obj_;
public:
vec(T a1, T a2);
//ここの関数の実体をクラスの外に出したい。
friend std::ostream & operator<< (std::ostream &stream,const vec<T>& ob)
{
std::vector<T>::const_iterator i=ob.obj_.end();
stream << "(" ;
copy(ob.obj_.begin(),ob.obj_.end()-1,std::ostream_iterator<T>(stream,", "));
stream << *(i-1) <<")";
return stream;
}
};
/***************************************************************************
テンプレートの実体
***************************************************************************/
//コンストラクタ
template<typename T>
vec<T>::vec(T a1, T a2):obj_(2)
{
obj_[0] = a1;
obj_[1] = a2;
}
int main()
{
vec<int> v(1,1);
std::cout << v << std::endl;
}
以下のようなテンプレートクラス(抜粋)を作っています。
その中にあるフレンド関数をクラスの外に出したいです。
どのようにすればいいでしょうか?
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
template<typename T>
class vec
{
private:
std::vector<T> obj_;
public:
vec(T a1, T a2);
//ここの関数の実体をクラスの外に出したい。
friend std::ostream & operator<< (std::ostream &stream,const vec<T>& ob)
{
std::vector<T>::const_iterator i=ob.obj_.end();
stream << "(" ;
copy(ob.obj_.begin(),ob.obj_.end()-1,std::ostream_iterator<T>(stream,", "));
stream << *(i-1) <<")";
return stream;
}
};
/***************************************************************************
テンプレートの実体
***************************************************************************/
//コンストラクタ
template<typename T>
vec<T>::vec(T a1, T a2):obj_(2)
{
obj_[0] = a1;
obj_[1] = a2;
}
int main()
{
vec<int> v(1,1);
std::cout << v << std::endl;
}