2014-09-27 3 views
0

типа я хочу, чтобы скопировать массив (либо символ * или wchar_t *) и у меня возникли следующие функции:Проверьте, является ли символ или wchar_t во время компиляции

template<typename T> 
T* doStuff(const T* str) 
{ 
    T* newArr; 
    if(typeid(str).name() == typeid(const wchar_t*).name()) 
    { 
     newArr = wcsdup(str); 
    } 
    else if (typeid(str).name() == typeid(const char*).name()) 
    { 
     newArr = strdup(str); 
    } 
    // ...do some more 
} 

Проблема заключается в том, что, когда я звоню функция сначала с аргументом char *, а затем с аргументом wchar_t. Я получаю ошибку времени компиляции (ошибка: никакой подходящей функции для вызова «wcsdup» И ошибки: нет соответствующей функции для вызова «strdup»).

Есть ли способ проверить время компиляции, является ли мой шаблон символом char * или wchar_t *?

ответ

2

Вы можете использовать перегрузку:

wchar_t* my_dup(const wchar_t* str) { return wcsdup(str); } 
char* my_dup(const char* str) { return strdup(str); } 

template<typename T> 
T* doStuff(const T* str) 
{ 
    T* newArr = my_dup(str); 
    // ...do some more 
} 

И ответить на ваш вопрос, вы можете использовать std::is_same для проверки во время компиляции типа T

std::is_same<wchar_t, T>::value 
+0

работает большое спасибо! – Michael

Смежные вопросы