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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структурка на макросах 
V
    Опции темы
Partizan
Дата 30.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Привет всем.

Вопрос такой:
есть числа M и N

Код

#define N ...
#define M ...


так вот можно ли как-нибудь сделать такой макрос, 
который бы создавал структурку с M интовыми полями по N бит

то есть результат в общем виде такой:

Код

struct X
{
    int m1:N;
    int m2:N;
    .... и таких полей M штук
}



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
GoldFinch
Дата 30.3.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Код

template<int N,int M>
struct X : X<N,M-1>
{
    int m1:N;
}
template<int N,int M>
struct X : X<N,0>
{}

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


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



GoldFinch, спасибо, но вопрос был о макросах smile Шаблонное решение не представляет интереса в силу того, что компилятор не поддерживает ни шаблоны, ни наследование...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
GoldFinch
Дата 30.3.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



а вот так?)
Код

#define MAKE_FIELDS(N,M) \
  #if M>=1 \
  int m1:N \
  #endif \
  #if M>=2 \
  int m2:N \
  #endif \
  #if M>=3 \
  int m3:N \
  #endif \
  ....

struct X {
    MAKE_FIELDS(N,M)
}


Добавлено через 2 минуты и 57 секунд
а вообще для этого есть boost/preprocessor (BOOST_PP_*)
PM MAIL ICQ   Вверх
Partizan
Дата 30.3.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Цитата

а вот так?)


GoldFinch, молодец, юмор оценил smile

К сожалению, я ооочень ограничен в используемых средствах..пишу под сигнальный процессор ADTS101...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Dmi3ev
Дата 31.3.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А может как-нибудь тут привязать
Код

#define Concat(x, y) x ## y

хз...


Это сообщение отредактировал(а) Dmi3ev - 31.3.2009, 01:06


--------------------

PM MAIL   Вверх
Ivanovich
Дата 31.3.2009, 04:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Поскольку структура создается во время компиляции, то её можно сгенерировать предварительно программно до нужного максимума M и поместить в файл
типа my_struct.h с содержанием 
Код

#define MAKE_FIELDS(N,M) \
  #if M>=1 \
  int m1:N \
  #endif \
  #if M>=2 \
  int m2:N \
  #endif \
  #if M>=3 \
  int m3:N \
  #endif \
  //  ....................


и в самой программе 

Код

#include "my_struct.h"

struct X {
    MAKE_FIELDS(N,M)
}

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


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Ivanovich, верное решение, поддерживаю. Думаю иного способа нет.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Anikmar
Дата 31.3.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Странная, на мой взгляд, конструкция в принципе. А для чего нужна такая структура? Массивом не заменить?
PM MAIL ICQ   Вверх
Rickert
Дата 31.3.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
GoldFinch
Дата 31.3.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Rickert @  31.3.2009,  09:03 Найти цитируемый пост)
Написание программы для написания программы.

это называется метапрограммирование, если что
PM MAIL ICQ   Вверх
Rickert
Дата 31.3.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



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


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
GoldFinch
Дата 31.3.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Rickert, более чем нормальное
PM MAIL ICQ   Вверх
Anikmar
Дата 31.3.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(GoldFinch @  31.3.2009,  10:01 Найти цитируемый пост)
Rickert, более чем нормальное 

Но не в данном случае, ИМХО. К метапрограммированию это отнести сложно - это скорее внешний макрос некий. Думаю проблему можно решить более простым способом - обычным массивом байт с побитным доступом по индексу.
PM MAIL ICQ   Вверх
Partizan
Дата 31.3.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Anikmar, такая структура нужна мне для более плотного размещения данных в памяти...

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


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1142 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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