program story

Boost에서 가장 많이 사용 된 부분

inputbox 2020. 7. 24. 20:51
반응형

Boost에서 가장 많이 사용 된 부분


내가 발견했을 때 나는 boost::lexical_cast스스로에게 "왜 이것에 대해 더 빨리 알지 못 했는가!"라고 생각했습니다. -나는 같은 코드를 작성하는 것을 싫어했다.

stringstream ss;
ss << anIntVal;
mystring = ss.str();

이제 나는 쓴다

mystring = boost::lexical_cast<string>(anIntVal);

어제, 스택 오버 플로우에서 부스트 분할 (코드 작성을 절약 할 수있는 또 다른 보석)을 발견했습니다.

string stringtobesplit = "AA/BB-CC")
vector<string> tokens;

boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); 
// tokens now holds 3 items: AA BB CC

나는 정기적으로 사용할 수있는 다른 기능을 찾는 부스트 문서를 살펴볼 것입니다.하지만 놓치기가 매우 쉽다고 생각합니다.

어떤 부스트 기능을 가장 많이 사용하십니까?


아마도 나를 위해 boost 중 가장 많이 사용되는 부분은 boost :: shared_ptr 입니다.


BOOST_FOREACH 는 인생을 다시 가치있게 만듭니다.

(아무도 이것을 언급하지 않은 이유는 무엇입니까? 질문은 8 개월 전에 요청되었습니다!)


나의 faves는 특별한 순서가 없습니다 :

  • 정규식
  • 파일 시스템
  • lexical_cast
  • program_options (정말 훌륭합니다!)
  • 테스트 (모든 단위 테스트 요구 사항에 대해).
  • 문자열 알고리즘
  • 문자열 토크 나이저
  • 형식 (유형 안전 printf 스타일 문자열 형식)
  • 똑똑한 ptrs

Boost는 첫 번째 크로스 플랫폼 앱을 작성할 때 큰 도움이되었습니다.


나는 당신이 당신의 소멸자를 어떻게 공급할 수 있는지 좋아합니다 shared_ptr.
즉, 예를 들어 FILE*파일을 사용하여 파일을 닫을 수 있습니다.
예 :

void safeclose(FILE*fp) {
    if(fp) {
        fclose(fp);
    }
}
void some_fn() {
    boost::shared_ptr<FILE> fp( fopen(myfilename, "a+t"), safeclose );
    //body of the function, and when ever it exits the file gets closed
    fprintf( fp.get(), "a message\n" );
}

아무도 다중 인덱스 컨테이너에 대해 언급하지 않았으므로 늦게 차임합니다. 자주 필요한 것은 아니지만 부스트가 없으면 동등한 데이터 구조를 작성하고 효율성을 떨어 뜨리는 것은 정말 힘든 일입니다. 나는 최근에 2 개의 키를 찾는 컨테이너를 만들기 위해 많이 사용했습니다.


아무도 언급하지 않은 것에 놀랐습니다 boost::optional. 및를 제외 shared_ptr하고 Boost의 다른 부분보다 자주 사용하는 것으로 나타났습니다 scoped_ptr.


아무도 boost :: tuple에 대해 언급하지 않습니까? 부끄러운 줄 아세요!


BOOST_STATIC_ASSERT

업데이트 (2011 년 10 월) : C ++ 11 (C ++ 0x)에는 http://www2.research.att.com/~bs/C++0xFAQ.html#static_assert 가 있습니다 static_assert .


내가 가장 많이 사용하는 방법 중 하나는 Boost에 적합하지 않지만 Boost 위에 빌드 된 ASL (Adobe Source Libraries) , 특히 별도의 시작 / 종료 반복자 대신 boost :: range를 허용하는 표준 알고리즘의 확장입니다. 그런 다음 전화하는 대신

std::for_each(some_container.begin(), some_container.end(), do_something());

간단히 말해

adobe::for_each(some_container, do_something());

(ASL의 이러한 부분이 결국 Boost로 마이그레이션되기를 바랍니다.)


나는 많이 사용한다 :

  • 부스트 :: 신호
  • boost :: shared_ptr
  • boost :: lexical_cast
  • 부스트 :: 바인드
  • 부스트 :: 랜덤
  • 부스트 :: 스레드
  • 부스트 :: 복사 불가능

Other like Tuple, Static Assert and Integer are very useful if you are writing a library which is due to be used on a variety of platforms.

Things like Graphs and Lambda are more specific.


boost::shared_ptr is a requirement for modern C++ programming IMHO. That's why they added it to the standard with TR1. boost::program_options, boost::bind, and boost::signal are really nice if you know what they are for and how to use them. The last two tend to scare newcomers though.


We found boost::spirit pretty useful for a business solution to parse ECMAScript. Complex, but very nice!


I'm surprised to don't see yet between the answers Boost.Thread.


I've been using shared_ptr for years now. It's just so useful, there's no reason that a project should be without it.

On top of that, I also use Bind/Function/Lambda for generic callback mechanisms -- especially useful when testing -- as well as Format for my general-purpose sprintf replacement.

Finally, it was just the other day when I used Variant in anger to solve a problem (a parser that could respond with a small, fixed set of unrelated token types). The solution was very elegant, and I'm very happy with it.


Years have passed and times have changed, so time for an update. SharedPtr and Function are now part of the Standard, and Bind and Lambda are obsoleted by actual language-level lambda functionality.

I still use Variant (which has also been standardized, but I'm not there yet), Format is largely replaced by fmtlib (which has also been standardized).

The big part of Boost that I use is Boost.Asio. Which is in the process of being standardized.


Using tuples to iterate a map, like this:

string key, value;
BOOST_FOREACH(tie(key, value), my_map) { ... }

Using boost assign, I can intialize a map like this:

map<string, string> my_map = map_list_of("key1", "value1")("key2", "value2")("key3", "value3");

And using range adaptors and the pipe("|") operator I can iterate backwards over the values of a map(as an example):

BOOST_FOREACH(string value, my_multimap.equal_range("X") | map_values | reversed) { ... }

You should check boost::program_options. It makes command line parsing much easier.


I use Boost Pointer Containers in preference to a STL container of shared_ptrs.


I use boost::numeric::ublas::matrix quite a bit.


I love boost::random and boost::asio and boost::filesystem, however boost::bind , boost::circular_buffer and boost::thread are very practical, smart pointers are ok but I prefer RAII instead as memory management


Okay, here is a new one I've found:
Instead of using stricmp I can use boost's equals function and pass in the is_iequal predicate
eg:
instead of

stricmp( "avalue", mystr.c_str() ) == 0

I can use

equals( "avalue", mystr, is_iequal() ) 

given:

#include <boost/algorithm/string.hpp>
using namespace boost::algorithm;

Here is my two cents:

  • boost::scope_exit - no need to define RAII class just for one use
  • boost::any
  • boost::variant
  • Boost Pointer Container Library (ptr_vector)
  • Boost Pool Library
  • boost::unordered_map / boost::unordered_set

I use boost::icl quite a lot for text post-processing. Saved me quite a lot of time because otherwise I'd have to implement text-splitting myself...

BOOST_FOREACH is everywhere in my code :)

boost::function and boost::bind are an absolute must. Although now they are std::function and std::bind. These really help reduce the amount of unnecessary code and are just generally good for my designs (or my delusions).

I've recently started using boost::interprocess::message_queue and this is a great tool too.

I'd use a lot more, but Qt has native ways of doing a lot of things Boost does. If I ever have to program pure C++, I guess I'd become a boost::junkie :)


What I use the most is now available in the TR1:

  • shared pointers
  • array class

Now I also use pool classes and some other more specific things.

You understand now that Boost is meant to be useful to most programmers, that's why it's the test bed for the future standard library.


Talking about boost::lexical_cast, why isn't something like 'format' a static member in the std::string library?
Almost all gui libs have something like CString::Format("%i") or QString::Number("%i") which return an initialised string.


I think the question should be reversed. Which part of you boost would you not want to use ?

In my experience pretty much all of it is interesting and useful in each problem domain.

You should spend time looking all around the boost documentation to find the areas that cover your interests.

One exception may be boost::numeric::ublas which is does its job, but Eigen does it remarkably better.

참고URL : https://stackoverflow.com/questions/325906/most-used-parts-of-boost

반응형