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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование тьюпл как общей сущности взамен стру, ктур 
V
    Опции темы
boostcoder
Дата 6.5.2011, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  6.5.2011,  23:25 Найти цитируемый пост)
первый набросок , на основе результативной структуры room_t : http://liveworkspace.org/code/853f1fea8e52...d6a735a7b46a261 

а это идея!

Добавлено через 1 минуту и 31 секунду
вот только это:
Код

// .cpp begin
const char*  type<room_t>::name() { return "room_t"; }

const char** type<room_t>::methods() {
      static const char* names[] = { "name" , "inbound" , 0 };
      return names;
}   
//.cpp end

я понятия не имею как сделать..ведь все генерится в одной файловой единице..

Добавлено через 3 минуты и 41 секунду
можно так: http://liveworkspace.org/code/901c72dce341...1318da49939ef96
PM WWW   Вверх
boostcoder
Дата 6.5.2011, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



все равно не понимаю для чего аксессоры оставлять внутри, а эти методы выносить..
PM WWW   Вверх
mes
Дата 6.5.2011, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  6.5.2011,  22:33 Найти цитируемый пост)
ведь все генерится в одной файловой единице..

а зачем все генерить в одной единице ?
почему нельзя генерить отдельно интерфейс, отдельно реализацию ?

Добавлено через 29 секунд
Цитата(boostcoder @  6.5.2011,  22:48 Найти цитируемый пост)
все равно не понимаю для чего аксессоры оставлять внутри, а эти методы выносить.. 

пока сам не знаю..  smile 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.5.2011, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  6.5.2011,  23:59 Найти цитируемый пост)
почему нельзя генерить отдельно интерфейс, отдельно реализацию ?

можно.
но в этом случае придется написать два макроса. один вписывать в .hpp файле со всеми параметрами. а второй в .cpp файле, так же, со всеми параметрами.. а если случиться несоответствие между параметрами, то понять причину ошибки будет очень не просто smile

Добавлено @ 00:07
а это, как раз основная причина из-за которой недолюбливают препроцессорную кодогенерацию.

Это сообщение отредактировал(а) boostcoder - 7.5.2011, 00:08
PM WWW   Вверх
mes
Дата 7.5.2011, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  6.5.2011,  23:06 Найти цитируемый пост)
, со всеми параметрами.

что подразумевается под "всеми параметрами" ?

Добавлено через 1 минуту и 2 секунды
Цитата(boostcoder @  6.5.2011,  22:48 Найти цитируемый пост)
для чего аксессоры оставлять внутри

кстати зачем все так сложно ? 
зачем аксессоры ? зачем наследование ?

Добавлено через 4 минуты и 40 секунд
что должна уметь Ваша структура ?
1. иметь наиболее близкий к классическому интерфейсу структуры
2. уметь отобразить строковые  имена структуры и методов
3. являться/преобразоваться к tuple 
4. сериализоваться и выводиться в поток, но это avtomatizirovano na osnovanii punkta 2.. 

что еще ?


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.5.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  7.5.2011,  00:20 Найти цитируемый пост)
что подразумевается под "всеми параметрами" ?

это:
Код

   ((room_t,
      ((std::string, name))
      ((std::vector<std::string>, inbound))
   ))
   ((type1,
      ((std::size_t, size))
      ((std::string, message))
   ))
   ((type2,
      ((std::string, string))
      ((std::string, code))
      ((std::string, message))
   ))
   ((type3,
      ((int, from))
      ((int, to))
      ((room_t, inbound))
   ))



Цитата(mes @  7.5.2011,  00:20 Найти цитируемый пост)
что должна уметь Ваша структура ?
1. иметь наиболее близкий к классическому интерфейсу структуры
2. уметь отобразить строковые  имена структуры и методов
3. являться/преобразоваться к tuple 
4. сериализоваться и выводиться в поток


угу. это все.

Добавлено через 42 секунды
ну и иметь еще уникальный id, который можно использовать в компайл-тайм.

PM WWW   Вверх
mes
Дата 7.5.2011, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  6.5.2011,  23:35 Найти цитируемый пост)
это:

просто придется лишние файлы делать.. 
defs.hpp
inc.hpp
src.hpp
где два последних включают defs между своих метаген инклудов
а все остальные пользуют inc.hpp

Добавлено через 4 минуты и 24 секунды
второй набросок : http://liveworkspace.org/code/bd091abb264f...a4979a83bb2d449


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


pattern`щик
****


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

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



Цитата(mes @  7.5.2011,  00:52 Найти цитируемый пост)
второй набросок : http://liveworkspace.org/code/bd091abb264f...a4979a83bb2d449

хм.. очень даже узабильно smile

Добавлено через 4 минуты и 59 секунд
Цитата(mes @  7.5.2011,  00:52 Найти цитируемый пост)
просто придется лишние файлы делать.. 
defs.hpp
inc.hpp
src.hpp
где два последних включают defs между своих метаген инклудов
а все остальные пользуют inc.hpp

осталось понять для чего это нужно smile 
PM WWW   Вверх
mes
Дата 7.5.2011, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  7.5.2011,  00:00 Найти цитируемый пост)
осталось понять для чего это нужно   

если нужна возможность разделения на интерфейс и реализацию...

Добавлено через 1 минуту и 17 секунд
Цитата(boostcoder @  7.5.2011,  00:00 Найти цитируемый пост)
хм.. очень даже узабильно

пока это всего лишь ход мыслей.. на вид отвратительно smile
просто иначе, пока  не напишешь, трудно понять чего хочется smile



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


pattern`щик
****


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

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



Цитата(mes @  7.5.2011,  01:14 Найти цитируемый пост)
если нужна возможность разделения на интерфейс и реализацию

что разделять, если это генерирует препроцессор? Вы ведь глазами тот код не увидите smile

Добавлено через 1 минуту и 35 секунд
или Вы предлагаете сначала вручную запускать препроцессор чтоб он сгенерил что нужно, а потом использовать сгенеренное как единицу трансляции?
PM WWW   Вверх
mes
Дата 7.5.2011, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  7.5.2011,  00:18 Найти цитируемый пост)
или Вы предлагаете сначала вручную запускать препроцессор чтоб он сгенерил что нужно, а потом использовать сгенеренное как единицу трансляции? 

зачем вручную ? в нужной единице трансляции будет включена typedefs как реализация, а в остальных, как интерфейс.. smile

Добавлено через 1 минуту и 10 секунд
Цитата(boostcoder @  7.5.2011,  00:18 Найти цитируемый пост)
что разделять, если это генерирует препроцессор? Вы ведь глазами тот код не увидите 

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

Добавлено через 1 минуту и 45 секунд
набросок 3: http://liveworkspace.org/code/c127b050f95c...83b624536fc1b6b

Добавлено через 3 минуты и 35 секунд
при втором варианте описания (см. ссылку) теряем возможность автоматического id, в полезности которого я сомневаюсь..зато развязаны руки по оформлению класса...


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


pattern`щик
****


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

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



Цитата(mes @  7.5.2011,  01:22 Найти цитируемый пост)
в нужной единице трансляции будет включена typedefs как реализация, а в остальных, как интерфейс

это все хорошо.. Вы мне просто скажите: для чего это нужно? ну генерирует он себе код - пусть генерирует...

Цитата(mes @  7.5.2011,  01:22 Найти цитируемый пост)
в одном случае результатом был интерфейс, в другом реализация

может тогда оставить генерацию как есть? ;)

Цитата(mes @  7.5.2011,  01:22 Найти цитируемый пост)
теряем возможность автоматического id, в полезности которого я сомневаюсь

неее. id - как раз нужен...

PM WWW   Вверх
mes
Дата 7.5.2011, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  7.5.2011,  00:39 Найти цитируемый пост)
это все хорошо.. Вы мне просто скажите: для чего это нужно? ну генерирует он себе код - пусть генерирует...

может и не нужно.. smile

Добавлено @ 01:49
Цитата(boostcoder @  7.5.2011,  00:39 Найти цитируемый пост)

неее. id - как раз нужен...

подумаем , как его добыть..

Добавлено @ 01:50
Цитата(boostcoder @  7.5.2011,  00:39 Найти цитируемый пост)
 id - как раз нужен...

P.S. понимаю что id нужен, я не вижу выгоды в зависимости id от countera..

Добавлено @ 01:59
я бы наверно привел бы к такому виду :
Код

METAGEN_ENUM (ids, room_t, a_t, b_t )


struct room_t
{
     std::string name;
     std::string inbound
     
     METAGEN(meta, room_t, (name, inbound))
};


набросок 4 : http://liveworkspace.org/code/82114ed27eeb...aa18f3339d378c0

если коллизии не сильно беспокоят, то набросок 5 : http://liveworkspace.org/code/fccd8f937463...f3458ef316c7969
вернулись к началу, но с другой стороны     smile 
 

Это сообщение отредактировал(а) mes - 7.5.2011, 02:14


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.5.2011, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  7.5.2011,  01:48 Найти цитируемый пост)
не вижу выгоды в зависимости id от countera

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

ну есть у меня файлик в ~4000 строк, в котором описаны все типы. да, куча. ну ничего. комментирование очень помогает smile 
PM WWW   Вверх
mes
Дата 7.5.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  7.5.2011,  01:23 Найти цитируемый пост)
это скорее единственный выход.. 

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


P.S. struct ids можно заменить на namespace ids ..

Это сообщение отредактировал(а) mes - 7.5.2011, 09:05


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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