I'm used to passing around string like this in my C++ applications:
void foo(const std::string& input)
{
std::cout << input.size() << std::endl;
}
void bar()
{
foo("stackoverflow");
}
Now I have a case where I want the string to be NULL:
void baz()
{
foo("stackoverflow");
foo(NULL); // very bad with foo implementation above
}
I could change foo
to:
void foo(const std::string* input)
{
// TODO: support NULL input
std::cout << input->size() << std::endl;
}
But to pass a string literal or copy a char*
to that implementation of foo
I need to write something like this:
void bar()
{
string input("hi"); // annoying temporary
foo(&input);
foo(NULL); // will work as long as foo handles NULL properly
}
I started thinking about inheriting from std::string
and adding a null
property, but I'm not so sure it's a good idea. Maybe it is better to simply use a const char*
string for parameters that can be NULL, but what if I want to save a copy of the string (or NULL) without having to manage its memory myself? (See What are some of the drawbacks to using C-style strings? etc.)
Any clever solution around?