gpt4 book ai didi

c - 改变可变参数

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:27 26 4
gpt4 key购买 nike

我想要一个采用可变参数包的函数/定义,它以某种模式扩展变异每个参数,例如:

foo(1,2,3);
foo(1,2,3,4,5);

应该扩展到

bar(modifier_1,modifier_2,modifier_3);
bar(modifier_1,modifier_2,modifier_3,modifier_4,modifier_5);

这能实现吗?如果是,怎么办?

最佳答案

使用升压预处理器你可以做这样的事情:

#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/tuple/size.hpp>
#include <boost/preprocessor/repetition/enum.hpp>

#define PREFIX_TUPLE_HELPER(z,n,data) \
BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(0,data),\
BOOST_PP_TUPLE_ELEM(n,BOOST_PP_TUPLE_ELEM(1,data)))

#define PREFIX_TUPLE(PREFIX_,TUPLE_) BOOST_PP_ENUM \
( BOOST_PP_TUPLE_SIZE(TUPLE_), \
PREFIX_TUPLE_HELPER, \
(PREFIX_,TUPLE_))

#define foo(...) bar(PREFIX_TUPLE(modifier_,(__VA_ARGS__)))

Online demo here.

没什么好解释的。 PREFIX_TUPLE 使用 BOOST_PP_ENUM生成逗号分隔列表。辅助宏只需要数据来完成工作;为此,我们只给它两个- tuple前缀和要粘贴到的元素元组。

关于c - 改变可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47321832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com