如何创建一个指针来存储具有任意数量参数的任何函数?

问题描述 投票:0回答:1

我正在尝试为我的引擎构建一个事件系统。我的想法是存储指向我希望事件在事件结构中执行的函数的指针,但到目前为止我还没有成功。 我对通过参数传递函数到其他函数完全陌生。

我设法把这个放在一起:

decltype(auto) _funcExec(Function&& func, Args&&...args)
{
    return std::forward<Function>(func)(std::forward<Args>(args)...);
}

但这只允许我通过 _funcExec 函数执行另一个函数。 我需要以某种方式从中创建一个类型:

(Function&& func, Args&&...args)
,这样我就可以创建我的事件结构的指针成员并将指针存储到我希望事件结构执行的函数..

我希望我解释得很全面。

所以我有两个问题..

  1. 这可能吗? 如果是的话
  2. 如何? :D

谢谢你。

c++ windows variadic-templates variadic-functions
1个回答
0
投票

正如评论中提到的,您可以将函数+参数变成

std::function<void()>
。您遗漏了许多细节,使用您提供的代码,您可以将其转换为以下内容以将
std::function
存储在某处:

#include <iostream>
#include <functional>

template <typename Function, typename ...Args>
auto make_function(Function&& func, Args&&...args)
{
    return std::function<void()>{
        [=](){ func(args...); }
    };
}

void foo() { std::cout << "foo\n" ;}
void bar(int x) { std::cout << "bar" << x << "\n"; }

int main() {
    auto f = make_function(foo);
    f();
    auto g = make_function(bar,42);
    g();
}

现场演示

© www.soinside.com 2019 - 2024. All rights reserved.