美文网首页
使用现代 C++ 实现的可变参数函数

使用现代 C++ 实现的可变参数函数

作者: 菜鸟No1 | 来源:发表于2019-11-15 18:08 被阅读0次

有时候我们需要定义一种可变参数的函数,如同 Mathematica 中的 Plus 函数,在这个函数中,我们可以输入任意正整数个变量,然后它会返回这些量的算术和,示例如下:

In[1]:= Plus[1, 2, 3, 4, 5]
Out[1]:= 15

显然这样的函数大有用处,那么如何使用 C++ 来实现这样的功能呢?答案是使用可变参数模板。

1. 函数的定义

具体的函数定义方式如下:

template<typename... T>
fun(T... args) {
    // define
}

这样我们就定义了一个可以输入任意类型任意个数的变量做为函数 fun 的实参。我们可以使用 sizeof...(args) 来获取输入参数的个数。

2. 参数的解析

参数的解析主要有两种方式:1. 基于范围的 for 循环;2. 递归调用。示例如下:

2.1 基于范围的 for 循环解析可变参数包

template<typename... T>
fun(T... args) {
    for (auto x : {args...}) {
         Do_something(x);
    }
}

2.2 递归调用[1]

// 用于终止迭代的基本函数
template <typename T>
void setVector(T arg) {
    vector.emplace_back(arg);
}

// 可变参数函数模板
template <typename T, typename... Args>
void setVector(T arg, Args... args) {
    setVector(arg);
    setVector(std::forward<Args>(args)...);
}

一个完整的示例代码如下:

#include <iostream>
#include <vector>

using namespace std;

class Example {
private:
    vector<double> Vec;

public:
    template <typename T>
    void setVector(T arg) {
        Vec.emplace_back(arg);
    }

    template <typename T, typename... Args>
    void setVector(T arg, Args... args) {
        setVector(arg);
        setVector(std::forward<Args>(args)...);
    }

    void printVector() {
        for (auto _ : Vec) {
            cout << _ << '\t';
        }
        cout << '\n';
    }
};

int main() {
    Example a;
    a.setVector(1.2, 2.3, 3.6, 4.6, 6.9);
    a.printVector();
}

编译并运行输出的结果如下:

1.2     2.3     3.6     4.6     6.9

  1. https://zhuanlan.zhihu.com/p/56242617 可变参数模板

相关文章

  • 使用现代 C++ 实现的可变参数函数

    有时候我们需要定义一种可变参数的函数,如同 Mathematica 中的 Plus 函数,在这个函数中,我们可以输...

  • ★10.关于可变参数模板

    可变参数函数模板 可变参数类模板 可变参数函数模板的使用 转发参数包

  • Lua可变参数

    Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用...表示函数有可变的参数。 把可变参数...

  • iOS可变参数和Format Function

    函数中使用可变参数使用NS_REQUIRES_NIL_TERMINATION 检查参数是否以nil 结尾,可变参数...

  • C++使用Lambda函数实现多线程

    转帖: C++使用Lambda函数实现多线程thread - 传递引用参数

  • php 可变数量的参数列表(...语法)

    通过...语法,在php中自定义函数时可以实现可变数量的参数列表。 实例1:函数参数使用...语法 将传入的参数包...

  • Python_4_函数

    4.函数 使用def创建一个函数 调用函数 调用函数另外一种方法 参数数量可变 参数数量可变的keyword参数 ...

  • 12. 可变参数函数

    12. 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法 如果函数最后一个参数被记作...

  • 函数

    使用元祖返回多个值 命名 默认参数和可变参数 常量参数,变量参数,inout参数 使用函数类型 函数式的编程 *变...

  • c++11 之回调函数

    什么是回调函数,以及在c++中如何使用? 回调函数就是将函数 作为参数传给其他的函数。 c++ 中有三种方式实现:...

网友评论

      本文标题:使用现代 C++ 实现的可变参数函数

      本文链接:https://www.haomeiwen.com/subject/sqvsictx.html