首页 > 后端开发 > C++ > 正文

如何在 C 中调用可变模板参数上的函数?

DDD
发布: 2024-11-10 22:02:03
原创
157 人浏览过

How do you call a function on a variadic template arguments in C  ?

在可变参数模板参数上调用函数

在 C 中,人们可能希望设计一个可以在任意数量的参数上无缝运行的函数各种类型的参数。虽然递归模板专门化允许此类功能,但它会产生大量冗余代码。为了解决这个问题,我们寻求一种更有效的方法。

C 17 折叠表达式解决方案

在 C 17 中,折叠表达式提供了一个简单的解决方案:

(f(args), ...);
登录后复制

此表达式有助于在 args 变量包中的每个参数上顺序调用 f。但是,如果 f 返回带有重载逗号运算符的对象,则应使用以下语法:

((void)f(args), ...);
登录后复制

C 17 之前的解决方案

C 17 之前,一种典型的方法涉及使用具有故意非 void 返回类型的列表初始值设定项:

{ print(Args)... }
登录后复制

但是,这需要将表达式包装在未使用的变量中,以防止由于 print 的 void 返回类型而导致编译错误:

using expand_type = int[];
expand_type{ (print(Args), 0)... };
登录后复制

为了增强此模式的可重用性,可以定义一个宏:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }

SO_EXPAND_SIDE_EFFECTS(print(Args));
登录后复制

为了减轻大数组的潜在分配,可以使用自定义结构:

namespace so {
    struct expand_type {
        template <typename... T>
        expand_type(T&amp;&amp;...) {}
    };
}
登录后复制

以上是如何在 C 中调用可变模板参数上的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板