Я привык передавать строку в моих приложениях на C ++ следующим образом:
void foo(const std::string& input)
{
std::cout << input.size() << std::endl;
}
void bar()
{
foo("stackoverflow");
}
Теперь у меня есть случай, когда я хочу, чтобы строка была NULL:
void baz()
{
foo("stackoverflow");
foo(NULL); // very bad with foo implementation above
}
Я мог бы изменить foo
на:
void foo(const std::string* input)
{
// TODO: support NULL input
std::cout << input->size() << std::endl;
}
Но чтобы передать строковый литерал или скопировать char*
в эту реализацию foo
Мне нужно написать что-то вроде этого:
void bar()
{
string input("hi"); // annoying temporary
foo(&input);
foo(NULL); // will work as long as foo handles NULL properly
}
Я начал думать о наследовании от std::string
и добавлении свойства null
, но я не уверен, что это хорошая идея. Может быть, лучше просто использовать строку const char*
для параметров, которые могут иметь значение NULL, но что если я захочу сохранить копию строки (или NULL) без необходимости самостоятельно управлять ее памятью? (См. Каковы некоторые недостатки использования строк в стиле C? и т. Д.)
Любое умное решение вокруг?