Для функций, чувствительных к локали, более распространено передавать std :: locale или необходимые объекты фасета? - PullRequest
2 голосов
/ 07 октября 2010

Недавно я написал семейство функций для обрезания начальных и конечных пробелов во входной строке. Поскольку понятие «пробельные символы» зависит от локали, я понял, что мне нужно будет либо передать ссылку const std::ctype<char_t> или ссылку const std::locale и вызвать std::use_facet<std::ctype<char_t> > для объекта const std::locale.

В моей библиотеке я решил передать ссылку const std::locale, потому что считал, что объект std::locale инкапсулирует всю информацию о локали и что std::use_facet является механизмом доступа к библиотеке. Однако затем я начал задаваться вопросом, может ли быть лучшим выбором (возможно, более распространенным?) Передавать ссылку const std::ctype<char_t> для прямого использования функциями.

Что чаще встречается в библиотеках, чувствительных к локали: передача ссылки const std::locale или const-ссылки на необходимые фасеты?

1 Ответ

2 голосов
/ 07 октября 2010

Учитывая, что стандартная библиотека isspace() на самом деле std::isspace(charT, const std::locale&), я думаю, что она будет следовать принципу наименьшего удивления, если ваши функции обрезки пробелов также потребуют const locale&.

Но что мешает вам разрешить и то и другое?

...