![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
||||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
есть шаблон
template<int x> inline void foo(); есть код №1 вида
где ??? - некоторый параметр которым инстанцируется foo каждая строчка foo<???>(); приводит к генерации в этом месте некоторого кода возможен другой вариант кода, №2
где на месте при каждого "вызова" bar неявно генерируется код foo задача такая - в каждом месте генерации инлайн кода foo, параметр шаблона foo должена быть случайным, соответственно должен быть сгенерирован случайный код этот "случайный" код желательно должен меняться не только от места вызова к месту вызова, но и от компиляции к компиляции. для этого перед компиляцией, сторонней утилитой можно генерить 1 случайную константу RAND_SEED пример решения для кода №1 средствами препроцессора
|
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нельзя ли вопрос немножко поконкретней сформулировать ? мысль вроде понял, но расплывчато.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
GoldFinch, ты все врага запутать хочешь?
Добавлено через 1 минуту и 4 секунды а выбор у тебя не велик, __(LINE, DATE, TIME)__ |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
vinter, DATE, TIME наверное неподходят, т.к. они возвращают строковый литерал, а его во ремя компиляции не обработать
mes, мысль такая. есть шаблон который принимает int генерит из этого int'а кусок инлайн кода, например такой template<int n> inline void nops() {__asm{nop};nops<n-1>();}; template<> inline void nops<0>() {}; надо в каждом месте где используется этот шаблон передать ему случайное число и при этом учесть ситуацию inline void bar() {nops<???>();}; так чтобы при каждом встраивании bar() использовались разные nops<> для этого bar наверное тоже надо делать шаблоном %) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
а если использовать твои наработки с хешем? |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Вы пробовали такое компилить ? шаблоны функций не поддерживают частичную специализацию .. Хотя можно реализовать через шаблонный класс.
без зацепки на контекст транслирования задача невыполнимая. т.е без какого-то аналога __LINE__ не обойтись , либо добавить свой препроцессор. В любом случае задача к шаблонам прямого отношения не имеет. Добавлено @ 20:30 P.S. GoldFinch, и где это Вы себе вечно находите приключения ?! Это сообщение отредактировал(а) mes - 17.3.2009, 21:16 |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
vinter, проблема в том, что язык шаблонов - функциональный, там нет переменных и нельзя поменять их значение, поэтому там нельзя получить бесконечную последовательность чисел, рекурсивно меняя глобальную переменную
но может какой-то способ есть %) mes, в msvc2008 компилится на ура, стандарт говорит что такое возможно (14.7 абзац 3) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага.. и gcc компилит .. не знал .. Это сообщение отредактировал(а) mes - 17.3.2009, 21:17 |
|||
|
||||
| Cтpaнник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 12.10.2008 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
GoldFinch, не проще ли будет нарыть в Инете исходники метаморфов и посмотреть реализацию генератора?
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Cтpaнник, не средствами С++ - сколько угодно реализаций, а вот средствами С++ я не видел
поэтому мне интересно возможно ли такое или нет |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
там нет никакой частичной специализации. Частичная специализацию у ф-ий запрещена. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |