C ++ std :: function <void()>包含shared_ptr

时间:2020-07-15 03:01:47

标签: c++ prototype std-function

该项目具有一些回调函数:

using fn = std::function<void()>;

回调函数是类X的构造函数的参数:

class X(fn).
X x([](){})
X.fn()

我想介绍另一种类型的回调函数来表示id,所以我需要另一种类型:

using xfn = std::function<void(int)>;

是否有可能更改参数,使其支持两种类型的功能。 该项目已经包含许多具有第一类功能的代码。它们用X.fn()来调用。我正在尝试使X类支持X.fn(100)。因此,人们都可以使用相同的名字fn来呼叫X.fn()X.fn(100)。 (我不希望它成为具有不同名称的新成员),就像具有默认值的函数一样。 fn() = fn(int val=100)

我要介绍:

X x([](int x){})
X.fn(100)

是否可以将类构造函数更改为更通用的原型函数,如

class X(genereal fn)

这样,如果X类可以同时接收[](){}[](int){}

2 个答案:

答案 0 :(得分:1)

您可以使用模板和std::function使其接受您喜欢的任何类型,如下所示

template<typename ...T>
struct X{

    X(std::function<void(T...)>&& fn_):fn{std::move(fn_)}{}
    std::function<void(T...)> fn;
};
int main()
{
    X<int> x1{[](int x){std::cout << "\n" << x;}};
    x1.fn(3);

    X<> x2{[]( ){std::cout << "\nnon";}};
    x2.fn();
}

Live

答案 1 :(得分:0)

假设您要使用相同的类并允许存储和访问这两个函数,则可以尝试以下方法:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/get_image')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')