本文主要是介绍C++变参模板的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C17
1. 使用编译器if常量表达式
template<typename T, typename U, typename... Ts>
void syszuxPrint(T arg1, Ts... arg_left)
{std::cout << arg1 << ", ";if constexpr (sizeof...(arg_left) > 0){syszuxPrint(arg_left...);}
}
但是这种方式对于我个人遇到的问题有点不适用,我需要的是第一是数据指针,然后第二个参数、第三个参数是数据的宽高,然后后面才是变参,这样递归处理的话不行
2. C17折叠表达式
template<typename... Ts>
void syszuxPrint(Ts... arg_left){(std::cout<< ... << arg_left) << std::endl;
}int main(int argc, char** argv)
{syszuxPrint(719,7030,"civilnet");
}
上述折叠表达式存在同样的问题
3. 变种折叠表达式
template <typename First, typename... Args>
void syszuxPrint(First first, int iWidth, int iHeight, Args... args)
{std::cout << first << std::endl;std::cout << iWidth << std::endl;std::cout << iHeight << std::endl;auto printWhiteSpace = [](const auto& arg) { std::cout << " " << arg << std::endl;};(..., printWhiteSpace(args)); // op是,
}
这样可以
这篇关于C++变参模板的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!