C++变参模板的使用

C17

1.  使用编译器if常量表达式

template
void syszuxPrint(T arg1, Ts... arg_left)
{
    std::cout << arg1 << ", ";

    if constexpr (sizeof...(arg_left) > 0)
    {
        syszuxPrint(arg_left...);
    }
}

但是这种方式对于我个人遇到的问题有点不适用,我需要的是第一是数据指针,然后第二个参数、第三个参数是数据的宽高,然后后面才是变参,这样递归处理的话不行

2. C17折叠表达式

template
void syszuxPrint(Ts... arg_left){
    (std::cout<< ... << arg_left) << std::endl;
}

int main(int argc, char** argv)
{
    syszuxPrint(719,7030,"civilnet");
}

上述折叠表达式存在同样的问题

3. 变种折叠表达式

template 
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++,项目问题整理,c++,java,前端)