Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строка как параметр шаблона 
:(
    Опции темы
SeregaLBN
Дата 18.12.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



как можно передать в шаблон строку?
Код

#include <Windows.h>

template <const char *TCaption = "qqq">
struct CTest {
   void alert(const char *szMessage) {
      ::MessageBox(::GetActiveWindow(), szMessage, TCaption, MB_OK);
   }
};

int main(int argc, char* argv[])
{
   CTest<"message"> test;
   test.alert("aaa");
   return 0;
}


Выдаёт ошибки
error C2964: invalid expression as template parameter
error C2973: 'CTest' : invalid template argument 'TCaption'
PM MAIL   Вверх
JackYF
Дата 18.12.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



SeregaLBN,
Параметром шаблона может быть только тип или целое число.
Строка - никак.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 18.12.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Просто нету смысла в строках, параметрах шаблона. Почему нельзя просто объявить конст-мембер и передать в конструкторе?


--------------------
PM MAIL ICQ Skype   Вверх
Oleg_Ci
Дата 18.12.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 3
Всего: 30



У Вандевурда и Джосаттиса вычитал подобный пример.
Код

#include <iostream>
using namespace std;

extern char const ch[] = "Hello world";

template <char const * str>
void fun(){
    cout << str << "\n";
}

//_________ MAIN_________________
int main(int argc, char *argv[])
{
    fun<ch>();
    getchar();
    return 0;
}

PM MAIL   Вверх
JackYF
Дата 18.12.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Крендец... Сколько же я за сегодня нового узнал!...
Шаблоны таки работают со строками...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 18.12.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Да, правда, можно.
Но все равно не вижу смысла. Иметь десятки классов для каждого кэпшена? Глупость какая-то.


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 18.12.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Не со строками, а с указателями, которые трактуются как целый параметр. 
Два разных экзепляра одного и того же текста сгенерируют разные классы. Так что будь осторожен.


--------------------
...
PM   Вверх
UnrealMan
Дата 19.12.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Earnest @  18.12.2006,  17:28 Найти цитируемый пост)
Не со строками, а с указателями, которые трактуются как целый параметр. 

Как это как целый параметр? 8-) В стандарте чётко сказано про указатели:

Цитата(§14.1 Template parameters)
A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
— integral or enumeration type,
— pointer to object or pointer to function,
— reference to object or reference to function,
— pointer to member.


Это сообщение отредактировал(а) UnrealMan - 19.12.2006, 12:05
PM MAIL   Вверх
Earnest
Дата 19.12.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Указатели бинарно совместимы с целыми типами: это ведь всего лишь смещение. Так чего удивляться - то.



--------------------
...
PM   Вверх
UnrealMan
Дата 20.12.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Earnest @  19.12.2006,  13:22 Найти цитируемый пост)
Указатели бинарно совместимы с целыми типами: это ведь всего лишь смещение. Так чего удивляться - то.

Указатель нельзя передавать в качестве целочисленного параметра. (Запятой перед словом «как» у тебя не стоит, поэтому оно означает именно «в качестве», а не «подобно»).
PM MAIL   Вверх
Earnest
Дата 20.12.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Я говорила об использовании строки (т.е. указателя на строку) в качестве параметра шаблона. 
И что значит - "нельзя"? Нет такого слова. Все можно, если понимаешь, что делаешь... smile 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.