![](/img/trans.png)
[英]Overloading variadic-templated member function and variadic-templated functions
[英]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
专业化提供不同参数类型的多个实现),而是(明确地)对其进行专业化处理,这可以视为在Type
为char
的情况下覆盖其一般定义。 语法只是
template<> void vekt<char>::move(vekt *second,char start) {…}
(请注意,模板参数列表可以从随后提到的vekt
以及类模板中的所有提及中省略。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.