c – 不能过载功能
发布时间:2020-12-16 10:22:27 所属栏目:百科 来源:网络整理
导读:所以我有一个模板化的类,当我有特定的类型时,我想重载一个函数的行为,比如说char.对于所有其他类型,让他们做自己的事情.但是,c不会让我重载该功能. 为什么我不能重载此功能?我真的不想做模板专业化,因为那时我已经复制了整个班级. 这是一个展示问题的玩具示
所以我有一个模板化的类,当我有特定的类型时,我想重载一个函数的行为,比如说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 *参数定义一个方法.在这种情况下,您不必复制整个班级.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |