LINUX.ORG.RU

boost::spirit, понимание внутренностей.


0

2

Простая грамматика:

qi::int_[func0] >> "," >> qi::int_[func0]
(func0 - это void func0(int);)

Не понимаю, как устроен qt::int_. Пытался читать исходники библиотеки, моск сильно пострадал - многовато макросов и шаблонов вперемешку.

Давайте я так спрошу. Как работает синтаксис передачи «актора» в квадратные скобки []? Это наверное сделано как-нибудь типа:

template< typename RT, T >
RETURN_TYPE operator[]( RT (*_function_pointer)(T) );

или как? Я этот operator[] искал-искал в исходниках спирита, обломался. Может ещё как-нибудь хитрее это сделано?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Я этот operator[] искал-искал в исходниках спирита, обломался. Может ещё как-нибудь хитрее это сделано?

А тебе, небось, сортировку пузырьком сделать надо? Все вокруг кричат «boost это круто!». Вот ты и полез...

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

Я подозреваю, что есть задачи, где буст применим и оправдан. Но на 90% уверен, что это тебе не нужно. Было бы нужно - ты бы такие глупые вопросы не задавал.

ziemin ★★
()
Ответ на: комментарий от ziemin

Ну я делаю что-то не так, ну буст мне не нужен - и чё? Вопрос-то не в том, делаю ли я ВСЁ так или НУЖЕН ли мне буст. Вопрос был о другом - где этот грёбаный оператор[].

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Вопрос задан. Не устраивает формулировка - спросите что непонятно в ней )

Просто мне кажется что ты городишь дикий велосипед.

ziemin ★★
()
Ответ на: комментарий от ziemin

Чувак, просто ОП задал вопрос учёного, а не инженера. Его интересует, не как пользоваться абстракцией под названием boost::spirit, а что находится под ней.

ilammy ★★★
()
Ответ на: комментарий от kiverattes

Не будьте в плену у тех, кто придумал, что строить велосипеды - это плохо) Мыслите свободнее.

Ога. Ты задал вопрос, который, при знании библиотеки, изучается за час. А уже прошло три. А я с самого начала знал, что объяснять бесполезно.

Подозреваю, что ты допиливаешь чей-то велосипед - не изменяй традициям: перепиши с нуля.

ziemin ★★
()
Ответ на: комментарий от ziemin

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

kiverattes ★☆
() автор топика

Возьми Common Lisp.

mv ★★★★★
()

qi::int_ имеет тип boost::spirit::terminal<boost::spirit::tag::int_>. Как можно посмотреть тип написано тут.

boost::spirit::terminal</*...*/> наследуется от boost::proto::exprns_::extends</*...*/>.

В объявлении boost::proto::exprns_::extends используется макрос BOOST_PROTO_EXTENDS_SUBSCRIPT_CONST(), который раскрывается в искомый оператор.

NeXTSTEP ★★
()

Я некоторое время назад менял работу и ходил по собеседованиям. Очень удивился, когда обнаружил, что boost::spirit используется во многих местах. Причём были случаи, когда хорошее знание этой библиотеки для работодателя играло решающую роль.

Ещё из крупных библиотек интересуются boost::asio.

Так что изучай, пригодится.

anonymous
()
Ответ на: комментарий от kiverattes

При интенсивном использовании часто возникают различные проблемы, для решения которых нужно хорошо знать КАК всё работает. Где-то нужно добавить функционал, где-то проблемы с производительностью, где-то косяки под определённой платформой.

Приходится лезть, разбираться, дописывать фронтэнды/бекэнды и т.п. В конце концов, чтобы внятный баг репорт составить на boost-овские кишки нужно знать немного больше, чем написано в руководстве.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.