通用std :: function上的包装类

时间:2014-10-21 23:59:47

标签: c++ visual-studio-2013 lambda

我正在尝试编写一个包装类foo,它以std::function作为参数,并公开一个方法来调用std::function。我没有成功尝试以下

template<class R, class ...Args>
class foo
{
public:
    foo(std::function<R(Args...)> f)
        :_f(f)
    {        
    }

    R invoke(Args... args)
    {
        return _f(args...);
    }

private:
    std::function<R(Args...)> _f;
};

int main()
{
    foo<void()> f([&](){ std::cout << "hi\n"; });
    f.invoke();
}

这不编译并给出以下错误

error C2091: function returns function

我该如何做到这一点?

1 个答案:

答案 0 :(得分:3)

改变这个:

foo<void()> f([&](){ std::cout << "hi\n"; });

到这个

foo<void> f([&](){ std::cout << "hi\n"; });

Demo

或者您可以使用函数类型参数化foo,例如std::function

 template<class T>
 class foo;

 template<class R, class ...Args>
 class foo<R(Args...)> {...};

 foo<void()> f([&](){ std::cout << "hi\n"; });

Demo