我在C ++中创建了一个与JavaScript的console.log相当的东西,但我不确定如何让我的函数期望不同类型的参数。
在JavaScript中:
function print(arg)
{
if(typeof arg=="number") { ... }
if(typeof arg=="string") { ... }
}
当然,JavaScript并不关心你给出一个函数,但是C ++会这样做,所以我如何能够捕获它(或者至少指定它接受的类型),稍后在函数本身中处理?
到目前为止我所拥有的一切:
void print(string input)
{
cout << input << "\n";
}
答案 0 :(得分:4)
您可以使用function template完成此操作。
template <typename T>
void print(const T& output)
{
std::cout << output << "\n";
}
这将为您传递给它的每种类型创建一个print
函数。
编辑:
如果您希望这也适用于数组,那么您可以添加
template<typename T, std::size_t N>
void print(T (&output)[N])
{
for (std::size_t i = 0; i < N; i++)
{
std::cout << output[i] << " ";
}
std::cout << "\n";
}
你可以在这个 Live Example
中看到所有这些一起工作答案 1 :(得分:0)
这是一个已解决的问题。
std::cerr << "My console output with a number! " << 42 << std::endl;
这是 stderr ,输出流通常由shell处理,而不是 stdout ,以便帮助调试和故障查找。它是JavaScript console.log
的完美类比,已经存在。
答案 2 :(得分:0)
您可以使用NathanOliver所描述的功能模板。
您还可以使用函数重载:只需定义具有相同名称但参数类型不同的多个函数。编译器将选择正确的。函数重载可能比模板函数更好,具体取决于您正在做什么。特别是,如果每种类型的参数都需要不同的函数体来处理它,函数重载可能比模板更有意义。