В настоящее время я работаю над проектом C ++, который должен иметь как можно меньше внешних зависимостей, и поэтому я в основном придерживаюсь STL и Boost. До сих пор я почти исключительно жил в Qt-land, когда речь заходит о C ++. В общем, я склонен использовать C # и Python, когда могу.
Сегодня я хотел проверить, содержит ли std::vector
определенный предмет. С Qt я бы сделал это так:
QList< int > list;
list.append( 1 );
list.append( 2 );
list.append( 3 );
if ( list.contains( 2 ) )
{
// do something
}
Красиво и читабельно. Но у std::vector
нет метода contains
, что было неожиданностью. Хорошо ... какой будет STL идиома для чего-то подобного? Обыскивая, кажется, что это:
std::vector< int > list;
list.push_back( 1 );
list.push_back( 2 );
list.push_back( 3 );
std::vector< int >::const_iterator result =
std::find( list.begin(), list.end(), 2 );
if ( result != list.end() )
{
// do something
}
Это (для меня) трудно читаемо и слишком многословно. Поэтому я обнаружил, что пишу служебную функцию, которая берет вектор и значение и возвращает bool
в зависимости от того, было ли найдено значение или нет. В основном, шаблонный contains()
метод; обертка для вышеупомянутого std::find
вызова. Затем я могу использовать это способом, подобным примеру Qt.
Я имею в виду несколько подобных утилитарных функций, которые обернули бы другие идиомы STL ни по какой другой причине, кроме (воспринимаемого) повышения читабельности. Что я хочу знать ... это плохая идея? Другие люди делают то же самое? Я что-то упустил? В какой-то момент код будет OSS, и я бы предпочел не делать ничего особенного, что другие разработчики C ++ сочли бы странным.