期待c ++中的各种参数类型

时间:2015-10-19 15:58:53

标签: c++ function arguments

我在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";
}

3 个答案:

答案 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所描述的功能模板。

您还可以使用函数重载:只需定义具有相同名称但参数类型不同的多个函数。编译器将选择正确的。函数重载可能比模板函数更好,具体取决于您正在做什么。特别是,如果每种类型的参数都需要不同的函数体来处理它,函数重载可能比模板更有意义。