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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BOOST_PP SET/ARRAY 
:(
    Опции темы
leniviy
Дата 8.3.2013, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я хочу сделать статик инициализацию переменной BSTR.
макрос:
Код

FOO('a','b','c')

должен раскрываться в :
Код

static const struct {
unsigned int nbytes;
wchar_t chars[4];
} mybstr = {
   3,
   { 'a', 'b', 'c', 0 }
};

sizeof(L"abc")/2 не катит - не стандарт.
Я думаю, что что-то похожее можно сделать с помощью boost PP SET, правда я в нём не разбираюсь.
Код

#include "stdafx.h"

#include <stdio.h>

#include <boost/preprocessor/seq/size.hpp>
#include <boost/preprocessor/seq/enum.hpp>

#define BSTR_DEF(varname, str_seq) \
    struct { \
      unsigned int nbytes; \
      wchar_t chars[BOOST_PP_SEQ_SIZE(str_seq)+1]; \
    } varname = { BOOST_PP_SEQ_SIZE(str_seq), { BOOST_PP_SEQ_ENUM(str_seq), 0 } }

static const BSTR_DEF(mybstr, ('a')('b')('c'));

int main()
{
    printf("%d %d %S\n", mybstr.nbytes, sizeof(mybstr.chars)/2, mybstr.chars);
    return 0;
}

Код

3 4 abc



Это сообщение отредактировал(а) leniviy - 8.3.2013, 19:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0604 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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