[英]variadic template recursion with sizeof…, but compile error: no matching function
[英]Use of sizeof operator in Variadic Template to skip the function for the end of recursion
我正在嘗試使用運算符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...);
錯誤C2780:'無效顯示(T,Types ...)':需要2個參數-提供0
解決方法是在遞歸結束時添加功能(我想避免)
void Display()
{
}
問題是如何避免遞歸函數結束
在C ++ 17之前的版本中,如果沒有一些解決方法就無法做到這一點,除非您重寫該函數以使其不遞歸。 原因是整個函數體被替換,包括if
語句的分支,這些分支永遠不會發生。 這意味着即使在運行時從未發生過,編譯器也可以看到不帶參數的Display()
調用。
從C ++ 17開始,解決此問題的方法是使用if constexpr
而不是if
。 這告訴編譯器在編譯時評估條件,而不嘗試編譯未執行的分支。
注意上面的“不嘗試編譯”只是一種簡化; 該鏈接提供了有關確切完成和未完成操作的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.