Необходимы ли эти перегрузки?

Мне нужно написать библиотеку, содержащую функцию, которая принимает два строковых параметра:

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 перегрузки?

Короче, сталкивались ли вы когда-нибудь с подобной ситуацией? Какой выбор вы сделали и почему?

Спасибо.

6
задан ereOn 29 July 2011 в 08:40
поделиться