gpt4 book ai didi

c++ - 具有任意数量参数的 C++ 中的模板函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:10 25 4
gpt4 key购买 nike

我正在尝试编写一个包含大量参数的模板函数,因此我只需要使用所需的数量即可。因为我是新手程序员,所以我想以简单的方式来做。我的函数代码是:

template<typename T1 = NULL, typename T2 = NULL> 
void showMessage(T1 input1 = NULL, T2 input2 = NULL) { cout << to_str(input1) << to_str(input2) << endl; }

我想这样调用它:

showMessage("Hello");

showMessage("Hello ","World");

但是好像不行...

我不想将输入默认为“”,因为它们可能是数字或 bool 值等。所以我改用 NULL。

通常这种东西适用于函数,所以我认为它也适用于模板。 :(

最佳答案

您可以使用可变参数模板来接受任意数量的参数。

void showMessage()
{
std::cout << std::endl;
}

template<typename T, typename... Args>
void showMessage(T const& first, Args&&... rest)
{
std::cout << first;
showMessage(std::forward<Args>(rest)...);
}

这里有一些更简单的东西也可以在 C++03 中使用(但它只接受有限数量的参数,并且要求它们是默认可构造的)

template<typename T = std::string,
typename U = std::string,
typename V = std::string>
void showMessage(T const& t = T(), U const& u = U(), V const& v = V())
{
std::cout << t << u << v << std::endl;
}

我在这里使用 std::string 作为默认类型的原因是因为默认构造的类型在发送到 cout 时不会打印任何内容。您可以为此目的制作自己的特殊类型:

struct Nothing {};
std::ostream& operator<<(std::ostream& os, Nothing) { return os; }

关于c++ - 具有任意数量参数的 C++ 中的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com