Вы можете просто предоставить новую перегрузку для to_string
std::string to_string(const std::string& s) { return s; }
Вы можете поместить приведенный выше код внутри класса, как закрытый метод или в подходящее пространство имен, чтобы избежать возможных конфликтов, когда, скажем, кто-то использует ваш код и хочет написать свою собственную перегрузку to_string
.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях ниже, вы не можете поместить такую перегрузку в пространство имен std
, так как новое объявление std::to_string
запрещено, см. Расширение пространства имен std .
РЕДАКТИРОВАТЬ: Если вам нужно, возможно, позвонить std::to_string
, вам может понадобиться добавить дополнительную функцию шаблона to_string
в ваш код как
template <typename T>
typename std::enable_if<!std::is_convertible<T, std::string>::value, std::string>::type to_string(T r) const { return std::to_string(r); }
(не забывайте #include <type_traits>
за это).
Это потому, что даже если вы импортируете стандартную библиотеку std::to_string
с помощью using namespace std
, функция-член to_string
будет иметь приоритет. Смотрите обсуждение: C ++: почему функция-член имеет приоритет над глобальной функцией . Здесь вы можете увидеть минимальный пример.