gpt4 book ai didi

c++ - 具有不同参数的函数容器

转载 作者:行者123 更新时间:2023-11-28 03:27:01 25 4
gpt4 key购买 nike

有没有办法在 vector 中存储具有不同参数的 void 函数?参数的数量总是一个,只是类型不同。参数类型可以是默认类型,如 int,指向我自己的对象的指针,如 example* 或任何其他类型。

我现在所做的是使用一个带有空指针作为参数的函数 vector 。所以我可以通过一切。但我想去掉所有函数中的反向转换。

unordered_map<string, function<void(void*)> > List;

void Callback(string Name, function<void(void*)> Function)
{
List[Name].push_back(&Function);
}

Callback("event", [](void* x){
int value = *(int*)x;
cout << value << endl;
});

这是一个例子来说明我想要的东西。请注意我更喜欢的模板语法。因此,我需要将所有功能存储在一个容器中。

vector<function<void(...)> > List; // need something other than a std vector

template <typename T>
void Callback(string Name, function<void(T)> Function)
{
List[Name].push_back(&Function);
}

Callback<int>([](int x){
cout << x << endl;
});

此应用程序与性能相关,因为它是实时渲染引擎的重要组成部分。

编辑:我解决了不带参数存储函数的问题,所以这不再是问题的一部分,是什么让问题更加清晰和直接。

最佳答案

如果可以传递给函数的参数类型有限,那么一种选择是使用类似 boost::variant 的参数:

typedef boost::variant<
std::function<void()>,
std::function<void(int)>,
std::function<void(long)>,
std::function<void(std::string const&)>
> my_functions;
typedef std::vector<my_functions> functions_list;

然后您可以将回调直接插入到容器中。

关于c++ - 具有不同参数的函数容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13658969/

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