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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строка в параметре шаблона, Как передать строку как параметр шаблона 
:(
    Опции темы
mes
Дата 29.7.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(avnemchenko @  29.7.2009,  11:12 Найти цитируемый пост)
Насколько я понял, речь идет о чем-то вроде такого?

нет. mystring это список типов и к нему можно применять операции описанные у Александреску.

Цитата(avnemchenko @  29.7.2009,  11:12 Найти цитируемый пост)
И тогда что такое LISTOFCHARS_7? Макрос, который раскидывает 7 символов куда-то? Не могли бы Вы привести пример его реализации?

вот на скорую руку :
Код


// алфавит символов
#define char_a  'a'
#define char_b  'b'
#define char_comma ','

// тип элемента списка символов
template<char c> struct char_type_t;

#define CHAR_TYPE(a) char_type_t < char_ ## a > a;
#define LIST_OF_CHARS_3(a,b,c) TYPE_LIST_3(CHAR_TYPE (a), CHAR_TYPE(b), CHAR_TYPE (c))  // TYPE_LIST... - это набор шаблонов Александреску (правописание может быть не точное)

// в итоге 
 LIST_OF_CHARS_3(a,comma,b) 
// даст 
TYPE_LISТ_3 (char_type_t<'a'>, char_type_t<','>, char_type<'b'>)


Это сообщение отредактировал(а) mes - 29.7.2009, 13:03


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 29.7.2009, 14:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(avnemchenko @  29.7.2009,  12:12 Найти цитируемый пост)
И тогда что такое LISTOFCHARS_7? Макрос, который раскидывает 7 символов куда-то? 

А ты точно читал Александреску? smile 
PM   Вверх
avnemchenko
Дата 29.7.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(azesmcar @ 29.7.2009,  14:09)
А ты точно читал Александреску? smile

Читал, но в автобусе smile  ...
PM ICQ   Вверх
bsa
Дата 29.7.2009, 22:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(avnemchenko @ 29.7.2009,  15:23)
Цитата(azesmcar @ 29.7.2009,  14:09)
А ты точно читал Александреску? smile

Читал, но в автобусе smile  ...

Короче, читай Мейерса. Программируй, набирайся опыта. А через пару лет перечитай Александреску, тогда уже поймешь, что и к чему.

А то сейчас все выглядит так, как если бы крестьянин, только что научившийся читать, пролистав труды Королева и Циолковского, начал бы строить ракету. Согласись, что это мягко говоря, для него рановато. Так и для тебя, не берись за сложное, не изучив азы (а азы ты явно не знаешь - в частности, шаблоны).
PM   Вверх
baldina
Дата 29.7.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



чет намудрили...
указатель может быть параметром, но не произвольный литерал, а именованная переменная с внешним связыванием:

Код

template <сhar *SomeString>
struct Str
{
    Str()    {}
    const char *ret (void) const    { return SomeString; }
};

char somestring[] = "Some string";

void main (void)
{
    Str < somestring > t;
    const char *p = t.ret ();
}



Добавлено через 3 минуты и 19 секунд
Цитата

Цитата

Или ты хочешь парсить строку на этапе компиляции? 


Да, мне интересно именно это.


MPL вам в руки. не строку, конечно, но в принципе то что надо. только имхо сложно и свеч не стОит
PM MAIL   Вверх
azesmcar
Дата 29.7.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(baldina @  29.7.2009,  22:43 Найти цитируемый пост)
чет намудрили...
указатель может быть параметром, но не произвольный литерал, а именованная переменная с внешним связыванием:


Да, ну так я потом поправил специально, речь шла только о строковом литерале а не об указателях вообще. Так можно, но что с этим делать то? smile 
PM   Вверх
baldina
Дата 29.7.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Цитата

Так можно, но что с этим делать то? 


то же, что и собирался. теперь компилирутся. да, надо объявить отдельную переменную, в этом есть некое неудобство. но остальное делаешь как хотел smile
только парсить строку на этапе компиляции не получится, нет таких возможностей, надо что-то иное. 
парсить через компилятор, как уже сказали, умеет boost::spirit. 
разберись и напиши похожее попроще. интерес, как я понимаю, чисто академический
PM MAIL   Вверх
azesmcar
Дата 30.7.2009, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(baldina @  29.7.2009,  23:07 Найти цитируемый пост)
только парсить строку на этапе компиляции не получится, нет таких возможностей, надо что-то иное. 

Тема плавно перешла в обсуждение смысла этого, так и забыли про изначальный вопрос smile 
Только я не пойму что значит парсить строку на этапе компиляции smile если знаешь как ее парсить - задавай уже в таком виде, в котором нужно, зачем еще ее парсить и парсер писать?
PM   Вверх
avnemchenko
Дата 30.7.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(azesmcar @ 30.7.2009,  06:59)
Только я не пойму что значит парсить строку на этапе компиляции smile если знаешь как ее парсить - задавай уже в таком виде, в котором нужно, зачем еще ее парсить и парсер писать?

А затем, что есть у меня железяка, которой я задаю программы в текстовом виде. Потом они из этого текстового преобразуются в байт-коды и передаются в железяку. Перечисление всех элементов в виде БНФ занимает немало места. Естественно, реализовывалось методом Copy-Past.

По ходу работы добавляются новые элементы языка. А это означает, что:

1) добавляется что-то в описание,
2) добавляется новый элемент в enum,
3) добавляются связи в Parser,
4) добавляется  в линковщик (если надо),
5) добавляется в преобразование из БНФ в байт-код,
6) добавляется в Debug-функцию, которая создает граф по БНФ,
7) добавляется в дизассемблер на конечном этапе.

Метод Boost хорош, но там все-таки пишется программа! А мне хотелось бы задавать собственно описание в виде БНФ (или точнее РБНФ) и избежать хотя бы какой-то части из вышеупомянутого списка.

Есть два варианта - или брать программы, которые по описанию генерят такие парсеры. Неплохо, но, как говорится, "некруто"  smile . Начитавшись Александреску (да, не спорю, понял немного, но после нескольких перечитываний въеду во все), задался вопросом - а можно ли сделать такой класс, которому передается на вход как параметр шаблона описание БНФ, а на выходе получаем парсер?

Вопрос несколько теоретический, но если я найду путь от строки до ее рекурсивного разбора на этапе компиляции, то получу оччень неплохую вещь!
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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