Я только сейчас вижу другой наивный код C ++, использующий sprintf для добавления встроенных команд C в массив символов, и я думаю, достаточно достаточно.
Я мог бы помочь с простыми, легкими, добавляющими и не форматирующими функциями для std::string
, но, поскольку это будет включено в общий код команды, я хочу, чтобы он был идеальным, поэтому мне нужно немного совет по интерфейсу этой функции (т.е. не по фактической реализации).
Возможно следующее (я не проверял, это просто догадка):
- Перегрузка оператора "
+=
" (возможно, в другом пространстве имен, чем std или global)
- Перегрузка оператора "
<<
" (опять же, в другом пространстве имен)
- Предоставление неоператорных функций, не являющихся членами (я полагаю, снова в другом пространстве имен)
- Ещё одного простого решения я не видел?
Какими будут плюсы и минусы каждого решения (я предпочитаю «+=
» или даже «<<
»)?
Примечания
- Дело не в форматировании. Если кто-то хочет форматировать, потоки C ++ хороши для этого. Я просто хочу добавить простой, легкий, один вызов оператора / функции.
- Использование другого пространства имен может быть связано с тем, что мы не авторизованы для добавления кода в пространство имен std, и я не хочу загрязнять глобальное пространство имен, поэтому, да, я полагаю, пользователь должен будет добавить
using namespace SomeNamespace ;
как это сделано для <utility>
s rel_ops пространства имен)
- Я использую
std::string
, который изначально не способен обрабатывать другие типы, кроме себя, char
и char *
. Я хочу расширить это для обработки других простых типов.
- Использование строкового потока слишком много весит в терминах кода (объявление потока, добавление, затем извлечение
.str()
для помещения его в строку и т. Д. И т. Д.), И последнее, что мне нужно, - это синтаксический подсластитель в строке функция, создающая поток строк при каждом вызове). Как вы можете видеть в приведенном ниже примере, решение для строкового потока слишком подробное :
.
// sprintf-like code with a char[] buffer:
sprintf(buffer, "%d", myDouble) ;
// stream-like code with a std::string buffer:
std::stringstream str ;
str << myDouble ;
buffer = str.str() ;
// example of desired code with a std::string buffer:
buffer += myDouble ;