0

クラス テンプレート関数を作成する方法はありますか?

たとえば

//Warning: this is conceptual pseudo-code

template<typename TemplateClass, TemplateItem>
TemplateClass &TemplateClass::operator=(TemplateItem &B)
{
   Item = B.Item;
   return *this;
}

//or...

template<typename TemplateClass, TemplateItem>
TemplateClass &TemplateClass::Assignment(TemplateItem &B)
{
   Item = B.Item;
   return *this;
}

Assignment<TestA,TestB>(B);

または、それらの線に沿った何か。

課題だけではありません、コメントします。

4

2 に答える 2

1

「プリプロセッサは悪だ」というグループにバッシングされると思いますが、次のようなものを探していると思います。

#define DEFINE_ASSIGNMENT(mainClass,memberClass,member)        \
mainClass & mainClass::operator = (const memberClass & rhs)    \
{                                                              \
    member=rhs.member;                                         \
    return *this;                                              \
}

DEFINIE_ASSIGNMENT(TestA,TestB,Item)
于 2011-09-29T17:41:33.343 に答える
1

クラスの定義に何かを追加することはできません。クラスに特定のメンバー関数を強制することはできません。をクラス定義に配置する;と、それは定義済みであり、変更することはできません。したがって、クラスのメンバーが必要な場合は、クラス定義内で宣言する必要があります。

このような機能を拡張する一般的な方法は、非メンバー関数を使用することです。

template<typename ClassName, typename Other>
ClassName &SomeFunc(ClassName &myType, const Other &theOther);

この関数は を返しmyTypeます。

明らかに、代入のように、クラスのメンバーでなければならない演算子には役に立ちません。しかし、それについてあなたができることは何もありません。できることのほとんどは、代入演算子に非メンバー関数を呼び出させることです。そのため、実際の作業はすべてそこで行われます。

しかし、それはあなたができる最善のことです。

于 2011-09-29T17:44:16.327 に答える