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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> compile-time typeid 
V
    Опции темы
boostcoder
Дата 16.7.2011, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



всем доброго дня.

интересуют идеи по реализации compile-time typeid.
в каком направлении рыть?

спасибо.

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


pattern`щик
****


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

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



как вариант, можно заранее формировать mpl::map. это конечно если все типы известны заранее.

Добавлено через 3 минуты и 59 секунд
в общем хочется получить что-то вроде:
Код

template<typename T>
int func(const T& v) {
   enum { id = compile_time_typeid<T>::value };
   return id;
}

int main() {
   std::cout << func(33) << std::endl;
   std::cout << func('z') << std::endl;
   std::cout << func(33.44) << std::endl;
   std::cout << func(44) << std::endl;
}

/** вывод */
0
1
2
0

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


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


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

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



Цитата(boostcoder @  16.7.2011,  16:36 Найти цитируемый пост)
 compile-time typeid.

так уже не раз же обсуждали, автоматически typeid получить нельзя.. 
можно например вместо ид использовать индекс в списке, но для этого нужен список типов.. или же задавать ид вручную.. 


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


pattern`щик
****


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

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



Цитата(mes @  16.7.2011,  18:06 Найти цитируемый пост)
так уже не раз же обсуждали

что-то мне подсказывало что обсуждали, но не могу вспомнить где/когда..

Цитата(mes @  16.7.2011,  18:06 Найти цитируемый пост)
можно например вместо ид использовать индекс в списке

с этим все ясно.

Цитата(mes @  16.7.2011,  18:06 Найти цитируемый пост)
или же задавать ид вручную

не удобно. не безопасно.

что-то мне подсказывает что все же можно при использовании constexpr.

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


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


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

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



Цитата(boostcoder @  16.7.2011,  17:14 Найти цитируемый пост)
что-то мне подсказывает что все же можно при использовании constexpr.

ну и как какой тип узнает где чей ид ?!

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


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


pattern`щик
****


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

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



со строками то можно работать в компайл-тайм.

Добавлено через 4 минуты и 3 секунды
я тут на днях накодил.
в том числе и такие алгоритмы:
Код

   TEST( find("012345678", '1') == 1 );
   TEST( find("0123456777a", '7') == 7 );
   TEST( find("0123456777a", 'b') == -1 );

   TEST( append("", "a") == "a" );
   TEST( append("", "") == "" );
   TEST( append("abc", "efgh") == "abcefgh" );

используется шаблон в качестве строки.

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

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

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


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


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

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



Цитата(boostcoder @  16.7.2011,  17:18 Найти цитируемый пост)
со строками то можно работать в компайл-тайм.

сорри, но к чему это было сказанно ? даже если ид строка, нужна все равно опорная линия определяющая что и кому принадлежит.. 



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


pattern`щик
****


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

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



т.е. со строками я могу работать так:
Код

   constexpr char str[] = "word1, word2:3:4";

   cout << "print word1 and word2: " << extract<0, find(str, ',')>(str) << " " << extract<find(str, ' ')+1, find(str, ':')>(str);
   cout << endl;
   cout << "print 3 and 4: " << extract<find(str, ':')+1, find(str, ':')+2>(str) << " " << extract<find(str, '3')+2, find(str, '3')+3>(str);

/** вывод */
print word1 and word2: word1 word2
print 3 and 4: 3 4


Добавлено через 51 секунду
Цитата(mes @  16.7.2011,  18:26 Найти цитируемый пост)
сорри, но к чему это было сказанно ?

извините, я просто размышляю в слух..

Цитата(mes @  16.7.2011,  18:26 Найти цитируемый пост)
 даже если ид строка, нужна все равно опорная линия определяющая что и кому принадлежит.. 

да-да-да...

Добавлено через 2 минуты и 26 секунд
да. тут проблема именно в передачи предыдущего результата для последующего использования.

Добавлено через 2 минуты и 34 секунды
эх..

Добавлено через 4 минуты и 20 секунд
тупик, похоже..
нужно использовать какой-то мета_конвертор_исходников.
PM WWW   Вверх
mes
Дата 16.7.2011, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  16.7.2011,  17:27 Найти цитируемый пост)
 тут проблема именно в передачи предыдущего результата для последующего использования.

 smile, для этого список и нужен был..

Цитата(boostcoder @  16.7.2011,  17:27 Найти цитируемый пост)
нужно использовать какой-то мета_конвертор_исходников. 

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




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


pattern`щик
****


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

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



Цитата(mes @  16.7.2011,  18:52 Найти цитируемый пост)
может сложиться ситуация, когда после перекомпиляции изменятся id

значит конвертеру нужно сообщать список типов с из ID`ами. заранее.
PM WWW   Вверх
mes
Дата 16.7.2011, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  16.7.2011,  18:15 Найти цитируемый пост)
значит конвертеру нужно сообщать список типов с из ID`ами. заранее. 

если есть список, то зачем внешний конвертор ?



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


pattern`щик
****


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

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



Цитата(mes @  16.7.2011,  19:18 Найти цитируемый пост)
если есть список, то зачем внешний конвертор ?

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

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

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

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

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


 




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


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

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