Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема со строками и шаблоном функции

388
04 мая 2006 года
warezhka
129 / / 11.10.2004
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
1) void fun(char* 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)
  ...
}

но как быть с константой 'A'.
351
04 мая 2006 года
PitxBull
633 / / 22.12.2004
Цитата:
Originally posted by warezhka
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
1) void fun(char* 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)
  ...
}

но как быть с константой 'A'.


гмс... сделать это с шаблоном не есть хорошая идея могут подсунуть какой угодно класс... но если все таки очень хочется то попробуй написать свой аналог макроса T("text")

351
04 мая 2006 года
PitxBull
633 / / 22.12.2004
вот ищо идея....

 
Код:
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*, надо бы попытаться найти более правильное ООП решение
395
04 мая 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by warezhka
Можно ли след вещь реализовать шаблонами?
необходимо два варинта функции работы с обычными ANSI строками и UNICODE.
Код:
1) void fun(char* 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)
  ...
}

но как быть с константой 'A'.


Хм даже не знаю... может так: :)

 
Код:
template <class T>
void fun(const T* pStr)
{
  ....
  if(pStr == (sizeof(T) == sizeof(wchar_t) ? L'A' : 'A'))
  ....
}
388
04 мая 2006 года
warezhka
129 / / 11.10.2004
спасибо за идеи. Вобщемто наверное для двух небольших функций стоит написать два варианта вручную. будет понятней и безопасней :)
398
04 мая 2006 года
Alexandoros
630 / / 21.10.2005
Про перегрузку слышал??

 
Код:
void fun(char* pStr)
{ ...
  if ('A' == pStr)
  ...
}
void fun(wchar_t* pStr)
{ ...
  if (L('A') == pStr)
  ...
}


Этот вариант будет очень хорошо работать в любом режиме
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог