Помимо template
, если ваш компилятор поддерживает C ++ 14, вы также можете использовать auto
с лямбда-функцией. Вы можете просто написать все это в основной функции.
auto print = [](const auto& message) {std::cout << message << std::endl;};
print(1); //1
print("AAA"); //AAA
Обратите внимание, что в отличие от Python, когда вы хотите напечатать что-то, вам не нужно сначала конвертировать его в string
. Пока то, что вы хотите напечатать, перегружено cout
, вы можете просто cout
его. И использование template
или auto
не меняет того факта, что все в C ++ статически типизировано, просто компилятор автоматически создаст для вас разные версии функций перегрузки.
EDIT
Как отметил @Peter в разделе комментариев, выражение «cout
- это то, что может быть перегружено, является неправильным», и точнее сказать, перегрузка operator<<
для ostream
и соответствующего класса