Map中的C++变量编号泛型参数

9nvpjoqh  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(136)

我有一些简单的代码:

#include <iostream>
#include <map>
#include <string>
#include <math.h>

using namespace std;

class Calculator{
    private:
        map<string, double (Calculator::*)(double)> mp = {
            {"ABS", &Calculator::abs}};

    public:

    Calculator(){
        cout << (this->*mp["ABS"])(-4.2655) << "\n";
    }

    double abs(double ting){
        return fabs(ting);
    }

};

int main() {
    Calculator calc;
    return 0;
}

它编译正常,没有错误。但是,正如上面的例子所示,map中包含的函数只允许一个double类型的参数。但是,我希望允许可变数量的多类型参数。
例如,到目前为止,我有一个abs()方法,但是如果要向map添加一个sigma()函数,该函数接受参数int startVal, int endVal, string expression,那么如何使用所示的布局来完成此操作呢?
我知道template<>在这里可能有用,但我对它还很陌生,我想知道它应该如何(或是否)在这里使用。

w1e3prcc

w1e3prcc1#

这个怎么样

#include <iostream>
#include <map>
#include <string>
#include <math.h>
#include <functional>
#include <vector>

#include <any>
using namespace std;
using func= std::function<double(std::vector<any>)>;

class Calculator {
private:
    map<string,func> funcs= {
        {"ABS", &Calculator::abs},
    {"ADD", &Calculator::add} };

public:

    Calculator() {
        any life = -42.0;
        std::vector<any> args;
        args.push_back(life);
        cout << funcs["ABS"](args) << "\n";

        any other = 99.4;
        args.push_back(other);

        cout << funcs["ADD"](args);

    }
   
    static double abs(vector<any> args) {
        return fabs(any_cast<double>(args[0]));
    }
    static double add(vector<any> args) {
        return any_cast<double>(args[0]) + any_cast<double>(args[1]);
    }
};

int main() {
    Calculator calc;
    return 0;
}

相关问题