C ++从Variadic列表中保存元素

时间:2015-12-21 23:02:29

标签: c++ variadic-templates functor variadic-functions

编辑 - 找到答案here

在C ++中,我试图创建一个仿函数,我可以将特定变量用作构造它时函数的参数。它使用可变参数模板传递参数类型并返回函数指针的类型。然后它使用可变参数构造函数来获取它应该使用的参数值。在代码中:

template <typename Return, typename... Args>
class Functor {
public:
    Functor(Return(*func)(Args...), Args... args) :
            function(func), arguments(args) {}

    // This overload to make the class "quack like a function"
    Return operator()() { return (*function)(arguments); }

private:
    Return(*function)(Args...);
    Args... arguments;     // <-- Right here is the problem. I don't
                           //     believe this is possible.

}

以及如何使用它:

#include <iostream>

float add(int x, int y) { return x + y; }

int main() {
    // Template arguments: returns float, takes two ints
    Functor<float, int, int> func(&add, 2, 3);
    std::cout << func() << std::endl; // <-- Should print 5, make sense?
}
在实例化仿函数之前,

function具有未知数量的参数,但我认为它们保证匹配函数签名,因为我使用相同的可变参数模板来创建它们(意味着它不会和如果函数签名与模板参数不匹配,则编译。那么,如何存储arguments以便我可以在以后将它们传递给function

0 个答案:

没有答案