gpt4 book ai didi

c++ - 无法理解 C++ 中的可变参数模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:05 25 4
gpt4 key购买 nike

我在阅读可变参数模板时遇到了这个例子。书中提到要结束递归过程,使用函数print()。实在看不懂它的用途。为什么作者要使用这个空的 print() 函数?

void print () // can't get why this function is used
{
}

template <typename T, typename... Types>
void print (const T& firstArg, const Types&... args)
{
std::cout << firstArg << std::endl; // print first argument
print(args...); // call print() for remaining arguments
}

最佳答案

可变参数表达式可以捕获 0 个或更多参数

以调用 print(1) 为例。然后 T 捕获 intTypes = {} - 它不捕获任何参数。因此调用 print(args...); 扩展为 print();,这就是为什么你需要一个基本案例。


你根本不需要递归。我总是在我的代码中使用以下 debuglog 函数(根据您的需要进行修改):

template<typename F, typename ... Args>
void
print(const F& first, const Args&... args) // At least one argument
{
std::cout << first << std::endl;
int sink[] =
{ 0, ((void)(std::cout << args << std::endl), 0)... };
(void) sink;
}

因为这个可变参数函数至少接受一个参数,所以您现在可以随意使用 print(void) 做任何您喜欢的事情。

关于c++ - 无法理解 C++ 中的可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30937379/

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