2008-12-14 13 views
9

tôi viết nhỏ C++ ví dụ này trong Eclipse 3.4.1 (CDT 5.0.1):Làm thế nào tôi có thể làm cho Eclipse CDT tự động thụt lề một cách chính xác khi sử dụng BOOST_FOREACH?

#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; 
} 

Sau đó, tôi nhấn Shift + Ctrl + F để định dạng mã của tôi, và nó trở thành:

#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; 
} 

Đây là với BSD/Allman Code Style. Các phong cách khác rõ ràng là thay đổi giao diện của mã được định dạng, nhưng không có kiểu nào cho thấy sự thụt lề chính xác.

Khi tôi sử dụng tính năng định dạng trên một đoạn mã lớn hơn, các hàm hoặc phương pháp tiếp theo cũng bị ảnh hưởng bởi quá ít thụt lề, làm cho định dạng trợ giúp khá vô ích.

Có điều gì tôi có thể làm để làm cho thụt đầu dòng hoạt động đúng với BOOST_FOREACH không?

+0

Bạn đã từng sửa lỗi này chưa? Plugin Astyle là IMO kém hơn vì nó sắp xếp các đối số hàm cách quá xa về bên phải. – Dave

+1

Tôi chưa bao giờ giải quyết vấn đề này. Lưu ý rằng tôi đã không làm việc trên dự án này trong các phiên bản Eclipse mới hơn. –

+1

là có thể nói nhật thực rằng 'BOOST_FOREACH' nên được định dạng giống như câu lệnh' while'? – Jayen

Trả lời

0

Euh ... bạn không thể? Hãy thử phiên bản tiếp theo của CDT ...: _ (

+0

Tôi đồng ý, nhận xét đã bị xóa. Nên đã đọc thêm, ứng dụng. – Emile

1

Strange, điều này đã từng làm việc với CDT 4. Vì vậy, nếu bạn thực sự thực sự cần điều này tôi đề nghị bạn hạ cấp CDT của bạn: -/

+0

Có thể trình định dạng quá thông minh? –

2

Bạn có thể muốn thử . các astyle eclipse plugin Nó có vẻ là đẹp hơn nhiều so với mặc định phong cách nhật thực của C++ thụt đầu dòng

3

Thêm phần này vào một số tiêu đề được sử dụng bởi mã của bạn:.

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

Tùy thuộc vào cách dự án của bạn được thiết lập để xây dựng (tức là nếu các cài đặt Eclipse không thực sự được chuyển đến trình biên dịch của bạn), bạn cũng có thể thiết lập điều này trong "C/C++ General-> Paths và Symbols-> Symbols" trong dự án tính chất. Xác định biểu tượng C++, "BOOST_FOREACH (a, b)" thành "for (a;;)" và cho phép nó lập chỉ mục lại. –

+0

Với CDT mới nhất (20120920-0800), cả hai đều không hoạt động. – Catskul

2

Nó vẫn được chia trong CDT hiện tại cho Kepler. Nhưng có một lỗi trong Bugzilla của Eclipse (kiểm tra trạng thái của nó here). Nó cuối cùng sẽ được sửa :-)

Các vấn đề liên quan