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是,
}

这样可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值