ネタ元。traitsクラスをテンプレートの特殊化でcharとwchar_t用を用意する。汎用型は用意しないのでこの2つの型でしか使えない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <wchar.h> #include <stdio.h> template<typename T> struct kansuu_traits; template<> struct kansuu_traits<char> { static FILE* open(const char* p) { return fopen(p, "r"); } }; template<> struct kansuu_traits<wchar_t> { static FILE* open(const wchar_t* p) { return _wfopen(p, L"r"); } }; template<typename cT> void kansuu(const cT* p) { FILE* f = kansuu_traits<cT>::open(p); fclose(f); } int main(int argc, char* argv[]){ kansuu(L"C:\\TEST\\Text.txt"); kansuu("C:\\TEST\\Text.txt"); return 0; } |