小编Mar*_*tin的帖子

如何将参数包和函数指针移动到结构中?

我已经在堆栈溢出和谷歌上运行了几个小时了。我似乎无法理解如何在包装结构中存储函数指针及其参数。

下面的类包装了一个函数(在本例中是一个带有模板化返回类型和参数的打包任务)。下面列出了包装器的主要部分。

编辑:我不使用 std::function 的原因是因为包装器(ThreadTask)包装了一个 std::packaged_task ,该任务被移动到线程安全双端队列中。Packaged_task 是可移动构建的,并且不支持复制,而 std::function 则支持复制。因此我制作了一个定制包装。

编译器给出错误并指出该函数不接受 0 个参数。但我不知道如何传递参数/存储它们。

class ThreadTask {
    struct BaseInterface {

        virtual void Call() = 0;
        virtual ~BaseInterface() {};
    };
    std::unique_ptr<BaseInterface> mImplementation;

    template <typename F, typename...Args>
    struct BaseFunc : BaseInterface {
        F func;

        BaseFunc(F&& f, Args... args) : func(std::move(f)) {}
        void Call() { func(); }
    };
};
Run Code Online (Sandbox Code Playgroud)

我尝试过以不同的方式解开这些论点,但我似乎无法使其发挥作用。我想我应该通过 std::forward 转发它们,但我不知道如何存储参数

c++ struct function wrapper variadic-templates

2
推荐指数
1
解决办法
153
查看次数

标签 统计

c++ ×1

function ×1

struct ×1

variadic-templates ×1

wrapper ×1