Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > const char* как параметр шаблона


Автор: MAKCim 4.3.2006, 10:23
всем привет
есть допустим структура
Код

template<const char* _St> struct A
{
    static const char* _String;
};

template<const char* _St> const char* A<_St>::_String=_St;

при попытке использования
Код

int main()
{
    A<"text"> w;
    return 0;
}

получаю ошибку 'string literals can never be used in this context'
странно, ведь "text" такая же константа как скажем 1, 2, ... в тексте программы
вообще какое тогда полезное применение указателей в качестве параметров шаблона?

Автор: DeadSoul 4.3.2006, 12:51
Код

extern const char szText[]="text";

int main()
{
  
    A<szText> w;
    return 0;
}

Добавлено @ 12:52
Подробности в книги Вандервуда

Автор: MAKCim 4.3.2006, 16:32
Цитата

Подробности в книги Вандервуда

вандевурда smile smile
вообще спасибо, прочитал, все логично

Автор: Partizan 4.3.2006, 16:37
а чем объясняется правильность применения именно второго варианта?

Автор: MAKCim 4.3.2006, 16:58
Цитата

Одна из проблем со строковыми литералами состоит в том, что два идентичных литерала
могут храниться по двум разным адресам. Существует альтернативный способ определения шаблонов,
генерация экземпляров которых осуществляется через строки.
<пример выше>
Отметим, что в данном примере необходимо указывать ключевое слово extern, поскольку в противном случае переменная константного массива будет иметь внутреннее связывание.

Автор: Partizan 4.3.2006, 17:01
понятно...спасибо....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)