1) void fun(char* pStr)
{ ...
if ('A' == pStr)
...
}
2) void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
Проблема со строками и шаблоном функции
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
Причем в проге может встречатся оба вызова. от определения UNICODE в проге это никак не зависит. Так что TCHAR исползовать не получается. думаю зашаблонить что-то типа
Код:
template<class T>
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
но как быть с константой 'A'.
Цитата:
Originally posted by warezhka
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Причем в проге может встречатся оба вызова. от определения UNICODE в проге это никак не зависит. Так что TCHAR исползовать не получается. думаю зашаблонить что-то типа
но как быть с константой 'A'.
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
1) void fun(char* pStr)
{ ...
if ('A' == pStr)
...
}
2) void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
{ ...
if ('A' == pStr)
...
}
2) void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
Причем в проге может встречатся оба вызова. от определения UNICODE в проге это никак не зависит. Так что TCHAR исползовать не получается. думаю зашаблонить что-то типа
Код:
template<class T>
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
но как быть с константой 'A'.
гмс... сделать это с шаблоном не есть хорошая идея могут подсунуть какой угодно класс... но если все таки очень хочется то попробуй написать свой аналог макроса T("text")
Код:
void* get_symbol_ANSI(char);
void* get_symbol_W(char);
template<class T>
func( T Str, (void*)(*symbol)(char) )
{
T a = static_cast<T>(symbol('A'));
}
void* get_symbol_W(char);
template<class T>
func( T Str, (void*)(*symbol)(char) )
{
T a = static_cast<T>(symbol('A'));
}
хотя лично мне не очень нравится из за исполльзования void*, надо бы попытаться найти более правильное ООП решение
Цитата:
Originally posted by warezhka
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Причем в проге может встречатся оба вызова. от определения UNICODE в проге это никак не зависит. Так что TCHAR исползовать не получается. думаю зашаблонить что-то типа
но как быть с константой 'A'.
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
1) void fun(char* pStr)
{ ...
if ('A' == pStr)
...
}
2) void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
{ ...
if ('A' == pStr)
...
}
2) void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
Причем в проге может встречатся оба вызова. от определения UNICODE в проге это никак не зависит. Так что TCHAR исползовать не получается. думаю зашаблонить что-то типа
Код:
template<class T>
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
void fun(T* pStr)
{ ...
if ('A' == pStr)
...
}
но как быть с константой 'A'.
Хм даже не знаю... может так: :)
Код:
template <class T>
void fun(const T* pStr)
{
....
if(pStr == (sizeof(T) == sizeof(wchar_t) ? L'A' : 'A'))
....
}
void fun(const T* pStr)
{
....
if(pStr == (sizeof(T) == sizeof(wchar_t) ? L'A' : 'A'))
....
}
спасибо за идеи. Вобщемто наверное для двух небольших функций стоит написать два варианта вручную. будет понятней и безопасней :)
Код:
void fun(char* pStr)
{ ...
if ('A' == pStr)
...
}
void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
{ ...
if ('A' == pStr)
...
}
void fun(wchar_t* pStr)
{ ...
if (L('A') == pStr)
...
}
Этот вариант будет очень хорошо работать в любом режиме