c++ - 泛型 std::function 上的包装类

标签 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

我怎样才能让它工作?

最佳答案

改变这个:

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

关于c++ - 泛型 std::function 上的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498364/

相关文章:

c++ - 将整数识别为二维数组下标中的 float

c - 未解析的外部符号(仍在发生)

.net - Visual Studio 2013 功能代码镜头与 NUnit

python - Python 中的 Lambda 和多语句

Java 8 : Syntax for Implementing java. util.function.Function 作为 Lambda 表达式

c++ - 您必须使用无限循环才能有效地重用协程句柄?

c++ - 数组以某种方式被不使用数组的逻辑修改

c++ - 当我 try catch [this] 时,用于回调函数的 lambda 表达式失败,为什么?

c++ - WINAPI SetLastError 与 C++ Keword 抛出

c# - VS2013 : "VSP2340: Environment variables were not properly set" even when running from IDE