Как правильно настроить автоматический отступ Eclipse CDT при использовании BOOST_FOREACH?

Я пишу этот крошечный пример на C++ в Eclipse 3.4.1 (CDT 5.0.1):

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>

int foo()
{
  std::vector<int> numbers;
  BOOST_FOREACH(int n, numbers)
  {
    std::cout << n << std::endl;
  }
  std::cout << numbers.size << std::endl;
}

Затем я нажимаю Shift + Ctrl + F, чтобы отформатировать свой код, и он становится таким:

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>

int foo()
{
    std::vector<int> numbers;
    BOOST_FOREACH(int n, numbers)
{   std::cout << n << std::endl;
}
std::cout << numbers.size << std::endl;
}

Это в стиле кода BSD / Allman. Другие стили, очевидно, изменяют внешний вид отформатированного кода, но ни один из них не дает правильного отступа.

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

Могу ли я что-то сделать, чтобы отступы работали правильно с помощью BOOST_FOREACH?

Вы когда-нибудь это исправляли? Плагин Astyle уступает IMO, потому что он выстраивает аргументы функций слишком далеко вправо.

Dave 15.04.2010 17:06

Я так и не решил этого. Обратите внимание, что я не работал над этим проектом и в более поздних версиях Eclipse.

activout.se 08.05.2010 12:03

Можно ли сказать eclipse, что BOOST_FOREACH должен быть отформатирован как оператор while?

Jayen 26.10.2011 02:45

Жалко, что спустя 6 лет эта ошибка все еще не исправлена.

Amos 03.04.2015 18:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
4
9 455
5

Ответы 5

Эээ ... ты не можешь? Попробуйте следующую версию CDT ...: _ (

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

Emile 31.08.2012 18:03

Странно, раньше это работало с CDT 4. Так что, если вам это действительно нужно, я предлагаю вам понизить версию CDT: - /

Вы можете попробовать плагин astyle eclipse. Кажется, это намного лучше, чем стиль отступа C++ по умолчанию eclipse.

Добавьте это в какой-нибудь заголовок, используемый вашим кодом:

#ifdef __CDT_PARSER__
    #undef BOOST_FOREACH
    #define BOOST_FOREACH(a, b) for(a; ; )
#endif

В зависимости от того, как ваш проект настроен для сборки (т.е. если настройки Eclipse фактически не передаются вашему компилятору), вы также можете установить это в «C / C++ General-> Paths and Symbols-> Symbols» в свойствах проекта. . Определите символ C++, от «BOOST_FOREACH (a, b)» до «for (a;;)», и разрешите ему переиндексировать.

Sam Hartsfield 27.04.2012 17:55

Он все еще не работает в текущем CDT для Кеплера. Но в Eclipse Bugzilla есть ошибка (проверьте ее статус здесь). Со временем это будет исправлено :-)

Другие вопросы по теме