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是,
}
这样可以