繁体   English   中英

在模板结构中重载函数

[英]Overloading a function in a templated structure

对于我的作业,我们必须制作一个具有各种变量和功能的模板化结构。 这是它的简化版本:

template <class Type>
struct vekt{
    Type *array;
    int len_of_array;
    int move(vekt<Type>* second, Type start){ ... }
}

函数移动的工作方式:它检查是否可以将调用的vekt的数组的第一个元素(array [0])移动到第二个vekt,如果可以,则这样做。 如果您可以从第二个->数组中获取该元素作为各种元素的总和,则可以移动调用vekt的第一个元素。 类型开始是添加该类型的中性元素。

因此,例如对于Type = int,如果调用的vekt在数组[4,5,6]中具有此值,而vekt second在数组[3,7,1]中具有此值,则函数move将返回1,因为第一个数组[4,5,6]的元素是4,您可以通过从数组[3,7,1]中添加3和1来获得它。 我做了那个功能,它的工作原理。

这是我的问题:我必须为Type = char重载此函数,因为不同的编译器将其视为unsigned或signed char。 我知道我该怎么做,但我不知道该怎么做。 我不知道如何将重载写入结构。 我可以这样做,然后只在第一个函数移动中编写特定于char的代码吗?

template <class Type>
struct vekt{
    Type *array;
    int len_of_array;
    int move(vekt<char>* second, char start){ ... }
    int move(vekt<Type>* second, Type start){ ... }
}

如果没有,那我该怎么办? 我的英语不是最好,但我希望我的解释是可以理解的

您要执行的操作不是重载成员函数(为同一 vekt专业化提供不同参数类型的多个实现),而是(明确地)对其进行专业化处理,这可以视为在Typechar的情况下覆盖其一般定义。 语法只是

template<> void vekt<char>::move(vekt *second,char start) {…}

(请注意,模板参数列表可以从随后提到的vekt以及类模板中的所有提及中省略。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM