А тип Stringable в объявлении функции это интерфейс, который говорит, что у объекта точно есть функция toString. Т.к. его имплементирует
В таких языках как ruby такого нет, так называемая утиная типизация, там в самой функции проверка идет obj.respond_to?("toString") которая проверяет что у объекта есть такой метод
Ладно, напишу свою версию. Если у тебя есть функция которая должна выводить объект в виде строки, можно объявить ее как
void printObj(const Stringable& obj) { std::cout << obj.toString(); }
А тип Stringable в объявлении функции это интерфейс, который говорит, что у объекта точно есть функция toString. Т.к. его имплементирует
В таких языках как ruby такого нет, так называемая утиная типизация, там в самой функции проверка идет obj.respond_to?("toString") которая проверяет что у объекта есть такой метод