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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конкатенация boost::mpl::string 
V
    Опции темы
boostcoder
Дата 2.11.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



следующий код:
Код

#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>

typedef boost::mpl::vector<
   boost::mpl::char_<'a'>,
   boost::mpl::char_<'b'>,
   boost::mpl::char_<'c'>
> slist;

typedef boost::mpl::fold<
   slist,
   boost::mpl::string<>,
   boost::mpl::push_back<boost::mpl::_1, boost::mpl::_2>
>::type string;

int main() {
   std::cout << boost::mpl::c_str<string>::value << std::endl;
}


http://liveworkspace.org/code/41511b3d5ba9...0b08445a753b5f5
работает как надо.

но если его изменить так:
Код

#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>

typedef boost::mpl::vector<
   boost::mpl::string<'ab'>,
   boost::mpl::string<'cd'>,
   boost::mpl::string<'ef'>
> slist;

typedef boost::mpl::fold<
   slist,
   boost::mpl::string<>,
   boost::mpl::push_back<boost::mpl::_1, boost::mpl::_2>
>::type string;

int main() {
   std::cout << boost::mpl::c_str<string>::value << std::endl;
}


http://liveworkspace.org/code/16fa2f9bde57...8d29931dfef7cb6
то получаю кучу ошибок.

вопрос в том, как можно конкатенировать массив mpl строк?

спасибо.

PM WWW   Вверх
mes
Дата 2.11.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



потому что пытаетесь сделать push_back<string, string>,
а string в отличие от char_ явлется seq, a не value.. 
a push_back напрямую последовательности не складывает..

Добавлено через 1 минуту и 40 секунд
это я так понимаю Вы к строке формата перешли ? 


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


Бывалый
*


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

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



Цитата(boostcoder @  2.11.2010,  15:05 Найти цитируемый пост)
то получаю кучу ошибок.

Разве в одинарных кавычках можно писать более одного символа? помоему нет.
--------------------
xor
PM MAIL Skype   Вверх
mes
Дата 2.11.2010, 16:44 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(rudvil @  2.11.2010,  15:31 Найти цитируемый пост)
Разве в одинарных кавычках можно писать более одного символа? помоему нет. 

Цитата

A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by
the letter L, as in L’x’. A character literal that does not begin with L is an ordinary character literal, also
referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type
char, with value equal to the numerical value of the encoding of the c-char in the execution character set.
An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter
literal has type int and implementation-defined value
.



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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  16:14 Найти цитируемый пост)
потому что пытаетесь сделать push_back<string, string>,
а string в отличие от char_ явлется seq, a не value.. 
a push_back напрямую последовательности не складывает..

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

вопрос закрыт..

Добавлено через 55 секунд
Цитата(mes @  2.11.2010,  16:14 Найти цитируемый пост)
это я так понимаю Вы к строке формата перешли ?  

ага.
что-то мне очень хочется реализовать это препроцессором. результат тот же, а времязатраты меньше.

Добавлено через 2 минуты и 19 секунд
Цитата(rudvil @ 2.11.2010,  16:31)
Цитата(boostcoder @  2.11.2010,  15:05 Найти цитируемый пост)
то получаю кучу ошибок.

Разве в одинарных кавычках можно писать более одного символа? помоему нет.

угу.
можно записать и так:
Код

boost::mpl::char_<'abc'>

но в действительности будет использован только последний символ.

Добавлено через 3 минуты и 48 секунд
Цитата(boostcoder @  2.11.2010,  16:48 Найти цитируемый пост)
вопрос закрыт..

т.е. нет, не закрыт.
какие способы решения есть?
PM WWW   Вверх
mes
Дата 2.11.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  2.11.2010,  15:48 Найти цитируемый пост)
какие способы решения есть? 

использовать вместо push_back другой алгоритм smile какой не знаю smile
по идеи  copy должен помочь..

Добавлено через 56 секунд
Цитата(boostcoder @  2.11.2010,  15:48 Найти цитируемый пост)
ага.
что-то мне очень хочется реализовать это препроцессором. результат тот же, а времязатраты меньше.

а все остальное уже работает ? что Вы к завершающим штрихам перешли ?


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  17:00 Найти цитируемый пост)
по идеи  copy должен помочь..  

попробую..
PM WWW   Вверх
boostcoder
Дата 2.11.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  17:00 Найти цитируемый пост)
по идеи  copy должен помочь..

вы снова правы smile 
Код

#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>

typedef boost::mpl::vector<
   boost::mpl::string<'ab'>,
   boost::mpl::string<'cd'>,
   boost::mpl::string<'ef'>
> slist;

typedef boost::mpl::reverse_fold<
   slist,
   boost::mpl::string<>,
   boost::mpl::copy<boost::mpl::_1, boost::mpl::back_inserter<boost::mpl::_2>>
>::type string;

int main() {
   std::cout << boost::mpl::c_str<string>::value << std::endl;
}


http://liveworkspace.org/code/0055a2e48b52...b5b3d939bc47f87

вопрос закрыт.

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


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


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

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



Цитата(boostcoder @  2.11.2010,  15:48 Найти цитируемый пост)
но в действительности будет использован только последний символ.

это опять "случайность", связанная с разрядностью.. будет использован остатка от деления на  (чар_мах+1), который равен последнему символу.. 
smile

Добавлено @ 18:38
Цитата(boostcoder @  2.11.2010,  17:28 Найти цитируемый пост)
вы снова правы 

уряя  smile 


Это сообщение отредактировал(а) mes - 2.11.2010, 18:46


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  18:38 Найти цитируемый пост)
будет использован остаок от деления на  (чар_мах+1), который равен последнему символу.. 

о как!


зы
вам череп не жмёт? smile 

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


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


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

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



Цитата(boostcoder @  2.11.2010,  17:39 Найти цитируемый пост)
о как!

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

Добавлено @ 18:45
Цитата(boostcoder @  2.11.2010,  17:39 Найти цитируемый пост)
Вам череп не жмёт? 

зря Вы так.. я всего лишь новичок.. и знаний не так много.. 
к бусту фактически впервые прикоснулся только в этом месяце.. 


а так меня просто спасает интуиция  smile 


Это сообщение отредактировал(а) mes - 2.11.2010, 18:47


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  18:42 Найти цитируемый пост)
хотелось бы подчеркнуть.. что самой операции, взятие деления тоже не будет.. это просто следствие переполнения..

 smile 

Цитата(mes @  2.11.2010,  18:42 Найти цитируемый пост)
я всего лишь новичок..

значит я зародыш smile 
PM WWW   Вверх
mes
Дата 2.11.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  2.11.2010,  17:53 Найти цитируемый пост)
  smile  

http://liveworkspace.org/code/8940c23611e7...5b357b59f732f39

"использован последний символ" - 2я строка вывода
"остаток от деления " - 3я строка вывода
"результат переполнения при приведении"  - 4я строка вывода (<- имелось ввиду это)
"наложение маски по and" - 5я строка вывода
smile

все приведенные строчки дают одинаковый результат, но это все частный случай из за особенностей архитектуры (т.е. так называемое "случайно")..

 

Это сообщение отредактировал(а) mes - 2.11.2010, 20:44


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  20:15 Найти цитируемый пост)
http://liveworkspace.org/code/8940c23611e7...5b357b59f732f39

"использован последний символ" - 2я строка вывода
"остаток от деления " - 3я строка вывода
"результат переполнения при приведении"  - 4я строка вывода (<- имелось ввиду это)
"наложение маски по and" - 5я строка вывода

забавно smile 
PM 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.0989 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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