所以我有一個模板化類,我想重載一個函數的行爲,當我有特定的類型,說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()方法。
在一天結束的時候,我寧願保持我的專業私人而非公開,所以我接受了磷蝦的答案。
無效DOX返回的東西。請解決這個問題。 –
問:什麼編譯器?問:什麼是確切的錯誤信息?問:當T == char時,你認爲兩個「m_getY()」函數可能會發生衝突嗎? ;) – paulsm4
@KirillKobelev很好,只是我的一個錯字。我解決了這個問題並更新了所有內容 – anio