テンプレートクラスのフレンド関数として多くのテンプレート関数を便利に宣言するにはどうすればいいですか?クラスの友人として多くの関数を宣言する
例:
template <typename T>
void funct1(MyClass<T> & A); //1.forward declaration.
template <typename T>
class MyClass{
protected:
T a;
friend funct1(MyClass<T> & A); //2.declare friend
}
template <typename T>
void funct1(MyClass<T> & A){ //3.actual implementation
++A.a;
}
ステップ1,2,3は、多くの機能ごとに繰り返します....
が、それは、その後のすべてを宣言し、何かにグループに可能なすべてのこれらの機能です何かがテンプレートクラスの友人ですか?
非常に多くの友人関数がそこにいるのはなぜ?たぶんあなたのデザインを再考する必要があります。 –
私はn次元配列の間に数学のための小さなライブラリを書いています。 myclassはn次元の配列オブジェクトです。この関数は、ndarrayで動作する数学演算です。私はすべての関数をndarrayオブジェクトのメソッドにすることができます。うーん。しかし、私はsin(ndarray A)の代わりにA.sin()のようなものを得ます。それはちょっと奇妙だと感じます。 – rxu
配列の要素を 'iterator'または' operator [] 'で公開する必要があるかもしれません。単に関数を 'friend'にするのは良い考えではありません。それ以外の場合は、新しい関数を追加するたびに、 'MyClass'を変更する必要があります。 –