Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > append mpl-последовательности


Автор: boostcoder 8.1.2011, 21:09
всем доброго вечера.
следующий код:
Код

typedef boost::mpl::map<
   boost::mpl::pair<..., ...>
> map_t; // исходный тип

//...

typedef boost::mpl::insert<
   map_t, // используем исходный тип для добавления нового элемента
   boost::mpl::pair<..., ...>
>::type map_t; // упс! тип с таким именем уже существует ;)



суть:
есть некоторые макросы, которые из аргументов создают mpl-тип.
эти макросы разбросаны по коду.
для того, чтоб в результате получить тип, который в себе содержит все элементы созданные макросами, каждый последующий макрос должен знать имя типа объявленного до него.
как это сделать? - захардкодить имя этого типа. и в результате получим продемонстрированную выше проблему.

подскажите решение.
спасибо.

Автор: boostcoder 12.2.2011, 00:25
up.

Автор: mes 12.2.2011, 01:31
конечный продукт этих макросов что представляет ? 

Автор: GoldFinch 12.2.2011, 01:48
макросы зло.

но если хочется - есть boost.preprocessor

Автор: boostcoder 12.2.2011, 01:49
Цитата(GoldFinch @  12.2.2011,  01:48 Найти цитируемый пост)
есть boost.preprocessor

пытался... не нашел решения.
подскажите?

Автор: GoldFinch 12.2.2011, 01:56
нда... есть BOOST_PP_COUNTER, но он использует инклуды, а их в макрос не засунуть.

в msvc есть __COUNTER__ , может и в гцц есть что-то похожее

Автор: boostcoder 12.2.2011, 01:57
Цитата(GoldFinch @  12.2.2011,  01:56 Найти цитируемый пост)
в msvc есть __COUNTER__ , может и в гцц есть

есть.
но чем это поможет?

Автор: GoldFinch 12.2.2011, 02:12
вместо 
Код

typedef ... T1;
typedef ... T1 ... T2;

можно использовать
Код

struct T1 { typedef ... type; };
struct T2 { typedef ... T1::type ... type; };

а значит можно использовать
Код

template<int ID> stuct T;
template<> struct T<1> { typedef ... type; };
template<> struct T<2> { typedef ... T<1>::type ... type; };

для генерации последовательных чисел - использовать __COUNTER__

Добавлено через 2 минуты и 15 секунд
но макросы и метапрограммирование для генерации кода - это зло.

Автор: boostcoder 12.2.2011, 02:15
GoldFinch, хм... вариант..
опробую...
спасибо smile 

Автор: boostcoder 12.2.2011, 02:30
Цитата(mes @  12.2.2011,  01:31 Найти цитируемый пост)
конечный продукт этих макросов что представляет ?

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

Автор: mes 12.2.2011, 02:33
Цитата(boostcoder @  12.2.2011,  01:30 Найти цитируемый пост)
дело в том, что когда я создавал тему, макросы предполагались. но сейчас их надобность находится под вопросом... 

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

Автор: GoldFinch 12.2.2011, 02:50
mes, чтобы понять каким инструментом достичь цели, сначала надо понять как можно изловчиться каждым инструментом из имеющихся.

Автор: boostcoder 12.2.2011, 09:14
GoldFinch, все сработало как надо. доволен как слон smile 
спасибо огромное smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)