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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инстанцировать шаблон случайным параметром 
:(
    Опции темы
GoldFinch
Дата 17.3.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



есть шаблон
template<int x> inline void foo();

есть код №1 вида
Код
...
foo<???>();
...
foo<???>();
...
... //еще вызовы foo

где ???  - некоторый параметр которым инстанцируется foo

каждая строчка foo<???>(); приводит к генерации в этом месте некоторого кода

возможен другой вариант кода, №2
Код
...
.... inline .... bar(...)
{
    ...
    foo<???>();
    ...
};
...
... bar(...) ...;
...
... bar(...) ...;
...
... //еще вызовы bar

где на месте при каждого "вызова" bar неявно генерируется код foo


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


этот "случайный" код желательно должен меняться не только от места вызова к месту вызова, но и от компиляции к компиляции. для этого перед компиляцией, сторонней утилитой можно генерить 1 случайную константу RAND_SEED

пример решения для кода №1 средствами препроцессора
Код

//generated.h - этот файл генерится внешней утилитой
#define RAND_SEED 00000

//main.cpp
#include "generated.h"
#define RND(X) ... //некоторый макрос генерирующий случайное число из X и RAND_SEED, например X*RAND_SEED
#define foo foo<RND(__LINE__)>  //случайное число, получается из номера строки

...
foo();
...
foo();
...
... //еще вызовы foo



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


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


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

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



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


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


Explorer
****


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

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



GoldFinch, ты все врага запутать хочешь? smile

Добавлено через 1 минуту и 4 секунды
Цитата(GoldFinch @  17.3.2009,  18:15 Найти цитируемый пост)
где ???  - некоторый параметр которым инстанцируется foo

а выбор у тебя не велик, __(LINE, DATE, TIME)__


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



****


Профиль
Группа: Завсегдатай
Сообщений: 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 наверное тоже надо делать шаблоном %)
PM MAIL ICQ   Вверх
vinter
Дата 17.3.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(GoldFinch @  17.3.2009,  19:59 Найти цитируемый пост)
т.к. они возвращают строковый литерал

а если использовать твои наработки с хешем?


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 17.3.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GoldFinch @  17.3.2009,  17:59 Найти цитируемый пост)
template<int n> inline void nops() {__asm{nop};nops<n-1>();};
template<> inline void nops<0>() {};

Вы пробовали такое компилить  ? шаблоны функций не поддерживают частичную специализацию ..
Хотя можно реализовать через шаблонный класс.



Цитата(GoldFinch @  17.3.2009,  17:59 Найти цитируемый пост)

надо в каждом месте где используется этот шаблон передать ему случайное число

без зацепки на контекст транслирования задача невыполнимая.
т.е без какого-то аналога __LINE__ не обойтись , либо добавить свой препроцессор.
В любом случае задача к шаблонам прямого отношения не имеет.

Добавлено @ 20:30
P.S. GoldFinch, и где это Вы себе вечно находите приключения ?!  smile 

Это сообщение отредактировал(а) mes - 17.3.2009, 21:16


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



****


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

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



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

mes, в msvc2008 компилится на ура, стандарт говорит что такое возможно (14.7 абзац 3)

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


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


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

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



Цитата(GoldFinch @  17.3.2009,  19:58 Найти цитируемый пост)
msvc2008 компилится на ура,

ага.. и gcc компилит .. не знал ..



Это сообщение отредактировал(а) mes - 17.3.2009, 21:17


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 12.10.2008
Где: Россия, Санкт-Пет ербург

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



GoldFinch, не проще ли будет нарыть в Инете исходники метаморфов и посмотреть реализацию генератора?
PM MAIL   Вверх
GoldFinch
Дата 17.3.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Cтpaнник, не средствами С++  - сколько угодно реализаций, а вот средствами С++ я не видел
поэтому мне интересно возможно ли такое или нет
PM MAIL ICQ   Вверх
vinter
Дата 17.3.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(mes @  17.3.2009,  22:17 Найти цитируемый пост)
ага.. и gcc компилит .. не знал ..

там нет никакой частичной специализации. Частичная специализацию у ф-ий запрещена.


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


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

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