gpt4 book ai didi

c++ - 在 Variadic Template 中使用 sizeof 运算符来跳过递归结束的函数

转载 作者:行者123 更新时间:2023-11-30 01:39:01 37 4
gpt4 key购买 nike

我正在尝试使用运算符 sizeof... 通过在没有参数的情况下不调用它来跳过递归结束的函数

#include<iostream>

template<typename T, typename ...Types>
void Display(T firstArg, Types...Args)
{
std::cout << firstArg << "\n";
std::cout << sizeof...(Types) << "\n";
std::cout << sizeof...(Args) << "\n";
if (sizeof...(Args) > 0)
Display(Args...);
}

int main()
{
Display(1, 2, 3,"hello");
return 0;
}

但我收到以下错误 Display(Args...);

error C2780: 'void Display(T,Types...)': expects 2 arguments - 0 provided

解决方法是为递归结束添加函数(我想避免)

void Display()
{

}

问题是如何避免递归函数结束

最佳答案

如果没有一些变通办法,C++17 之前的版本,你无法做到这一点,除非你将函数重写为非递归的。原因是整个函数体都被替换了,包括永远不会发生的 if 语句的分支。这意味着编译器会看到对 Display() 的调用没有参数,即使它在运行时永远不会发生。

从 C++17 开始,解决这个问题的方法是使用 if constexpr而不仅仅是 if。这告诉编译器在编译时评估条件,而不是尝试编译不执行的分支。

请注意,上面的“不尝试编译”是一种简化;该链接包含有关具体完成和未完成的内容的更多详细信息。

关于c++ - 在 Variadic Template 中使用 sizeof 运算符来跳过递归结束的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694253/

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