Это может быть не то, что вы ищете, но для вашего кода
std::cout << str_manip("string to manipulate");
параметр str_manip
- это не string
, а const char*
(на самом деле массив, но конвертируемыйна указатель char
).Исходя из этого, вы можете перегрузить.
std::string str_manip(const char* s)
{
std::string str(s); // create str
// manipulate str
return str;
}
Однако давайте посмотрим на общую картину.Когда вы видите str_manip
в своем коде, означает ли это «изменить строку» или «создать новую строку на основе данной строки»?Хотите ли вы быть намеренно амбивалентным в отношении реального значения?
Считайте, что читаете свой код через год.Что вы будете думать, когда увидите вызов str_manip
- это изменит его параметр?Зависит ли ответ на предыдущий вопрос от контекста?
Цель написания кода - прояснить его, особенно в многопарадигмальном языке, таком как C ++.Так что, на мой взгляд, просто не перегружайте то, о чем вы думаете.Вместо этого сделайте 2 разных имени, например
void frobnicate_str(std::string&) {...}
std::string get_frobnicated_str(std::string) {...}