C++のお話。
テンプレートの特殊化ってのを使って、
テンプレートクラス内のテンプレートメンバ関数を特殊化しようとしたが、
どうやら出来ない模様。なんでや!!
とりあえず、デフォルトの処理、ある型の場合は特別な処理、
という感じにわける事は出来るのかなー、と思ってこんなことやってみた。
#include <iostream> template <typename T> void test(const T val){ std::cout << "default: " << val << std::endl; } void test(const char * val){ std::cout << "const char * : " << val << std::endl; } void test(char * val){ std::cout << "char * : " << val << std::endl; } int main(void){ const char *x = "x"; char y[] = "y"; test(1); // int test("a"); // const char * ? test(x); // const char * test(y); // char [](char *) test(3.14); // double return 0; }
default: 1
const char * : a
const char * : x
char * : y
default: 3.14
文字列"a"を変数に入れない場合は、const char *型なんだー
って思ったんだけど、参照を使って、
void test(const char * val)
を
void test(const char * &val)
に変えてみると、
default: 1
default: a
const char * : x
char * : y
default: 3.14
ってなる。
文字列"a"を変数にいれず、直接関数の引数に与えて呼び出すと、
const char * 型の参照としては扱えない、という発見があったわけです。
まぁ、参照にするメリットはあんまないんで、問題にはなってないんですけども。
osake oisii desu ^p^