所以我有一个模板化类,当我有特定类型(例如 char)时,我想重载函数的行为。对于所有其他类型,让他们做自己的事情。但是,C++ 不允许我重载该函数。
为什么我不能重载这个函数?我真的真的不想要进行模板专业化,因为这样我就复制了整个类。
这是一个演示该问题的玩具示例:http://codepad.org/eTgLG932 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 的回答。
您可以仅将整个模板类中的一个函数专门化为特定类型,而无需专门化整个类。它看起来像这样:
template <> void Foo<char>::doX() {
/* custom implementation here */
}
在实践中你很少看到这种情况,但这是完全合法的 C++ 代码。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)