したがって、テンプレート化されたクラスがあり、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;
}
ご提案いただきありがとうございます。2 つの有効なソリューションが提示されています。doX メソッドを特化するか、m_getY() メソッドを特化することができます。
結局のところ、私は自分の専門分野を公開するよりも非公開にしておくことを好むので、クリルの答えを受け入れています.