模板的使用"/>
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++变参模板的使用
发布评论