c – 不能过载功能

c – 不能过载功能,第1张

概述所以我有一个模板化的类,当我有特定的类型时,我想重载一个函数的行为,比如说char.对于所有其他类型,让他们做自己的事情.但是,c不会让我重载该功能. 为什么我不能重载此功能?我真的不想做模板专业化,因为那时我已经复制了整个班级. 这是一个展示问题的玩具示例:http://codepad.org/eTgLG932 这里贴出相同的代码供您阅读: #include <iostream>#includ 所以我有一个模板化的类,当我有特定的类型时,我想重载一个函数的行为,比如说char.对于所有其他类型,让他们做自己的事情.但是,c不会让我重载该功能.

为什么我不能重载此功能?我真的不想做模板专业化,因为那时我已经复制了整个班级.

这是一个展示问题的玩具示例:http://codepad.org/eTgLG932

这里贴出相同的代码供您阅读:

#include <iostream>#include <cstdlib>#include <string>struct bar{  std::string blah() { return "blah"; }};template <typename T>struct Foo{public:  std::string doX()  {    return m_getY(my_t);  }private:  std::string m_getY(char* p_msg)  {    return std::string(p_msg);  }  std::string m_getY(T* p_msg)  {    return p_msg->blah();  }  T my_t;};int main(int,char**){  Foo<char> x;  Foo<bar> y;  std::cout << "x " << x.doX() << std::endl;  return EXIT_SUCCESS;}

谢谢大家的建议.提出了两种有效的解决方案.我可以专门化doX方法,或者专门化m_getY()方法.

在一天结束时,我宁愿保持我的专业而不是公开,所以我接受了Krill的回答.

解决方法 您可以使方法m_getY成为成员函数模板.并且他们为char *专门化这个函数模板,或者简单地用char *参数定义一个方法.在这种情况下,您不必复制整个班级. 总结

以上是内存溢出为你收集整理的c – 不能过载功能全部内容,希望文章能够帮你解决c – 不能过载功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存