如何制作通用类方法?

时间:2011-09-29 16:46:55

标签: c++ templates function-templates

有没有办法制作类模板函数?

所以例如

//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);

或类似的东西。

这不只是作业,我会发表评论。

2 个答案:

答案 0 :(得分:1)

我确信我会受到“预处理者是邪恶的”团体的打击,但我认为你正在寻找这样的事情:

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

DEFINIE_ASSIGNMENT(TestA,TestB,Item)

答案 1 :(得分:1)

您无法在类的定义中添加内容。您不能强制类具有特定的成员函数。将;放在类定义上之后,它已被定义,并且无法更改。因此,如果您想拥有一个类的成员,则必须在类定义中声明

现在,扩展此类功能的一般方法是使用非成员函数:

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

此函数将返回myType

显然,这对那些必须是班级成员的运营商(如作业)没有帮助。但是你无能为力。你可以做的最多就是赋值操作符调用非成员函数,所以所有的实际工作都在那里进行。

但这是你能做的最好的事情。