タイトルに文字列と文字ポインタの両方の関数テンプレートを特化したいと言っていますが、今まではthisでしたが、参照によって文字列パラメータを渡すことはできません。std :: stringとcharの両方の特殊化関数テンプレート*
#include <iostream>
#include <string.h>
template<typename T> void xxx(T param)
{
std::cout << "General : "<< sizeof(T) << std::endl;
}
template<> void xxx<char*>(char* param)
{
std::cout << "Char ptr: "<< strlen(param) << std::endl;
}
template<> void xxx<const char* >(const char* param)
{
std::cout << "Const Char ptr : "<< strlen(param)<< std::endl;
}
template<> void xxx<const std::string & >(const std::string & param)
{
std::cout << "Const String : "<< param.size()<< std::endl;
}
template<> void xxx<std::string >(std::string param)
{
std::cout << "String : "<< param.size()<< std::endl;
}
int main()
{
xxx("word");
std::string aword("word");
xxx(aword);
std::string const cword("const word");
xxx(cword);
}
template<> void xxx<const std::string & >(const std::string & param)
ものだけでは機能しません。
パラメータをT&
として受け入れるように元のテンプレートを並べ替えた場合、char *
はchar * &
である必要があります。これはコード内の静的テキストには適していません。
助けてください!
今はコンパイルされません! 'strlen'のために' 'を返す必要があります。 –
TonyK