Мне нужно написать библиотеку, содержащую функцию, которая принимает два строковых параметра:
void foo(const std::string& arg1, const std::string& arg2);
Моя библиотека будет использоваться некоторыми людьми, которым не нравится C ++ и используются только для const char *
.
Чтобы удовлетворить их симпатии, я изменил прототип:
void foo(const char* arg1, const char* arg2);
И сделал мою первую версию простым встроенным вызовом:
inline void foo(const std::string& arg1, const std::string& arg2)
{
foo(arg1.c_str(), arg2.c_str());
}
Конечно, благодаря std :: string
, он работал бы почти так же только с первой версией. Написание этой перегрузки просто позволяет избежать создания бесполезных экземпляров std :: string
в случае, если кто-то передает только const char *
.
Но теперь я задаюсь вопросом: действительно ли эта перегрузка необходима или это просто преждевременная оптимизация?
Кроме того, я чувствую, что это что-то неполное: следует ли мне также написать void foo (const char * arg1, const std :: string & arg2)
и void foo ( const std :: string & arg1, const char * arg2)
перегрузки? Что делать, если у меня 3, 4 или более параметров ( n
)? Стоит ли писать 2 n перегрузки?
Короче, сталкивались ли вы когда-нибудь с подобной ситуацией? Какой выбор вы сделали и почему?
Спасибо.