所以我有一个模板化的类,我想在我有特定类型时重载函数的行为,比如 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 的回答。