小编Eug*_*yev的帖子

将 lambda 作为参数传递给带有任意数量参数的 std::function 参数的函数

考虑下一个代码示例:

template <typename... TArgs>
void foo(std::function<void(TArgs...)> f) {
}

template <typename... TArgs>
class Class {
public:
    static void foo(std::function<void(TArgs...)> f) {
    }
};
Run Code Online (Sandbox Code Playgroud)

为什么我可以这样做:

int main() {
// Helper class call
    Class<int, int>::foo(
        [](int a, int b) {}
    );
}
Run Code Online (Sandbox Code Playgroud)

但这样做时出现编译错误:

int main() {
// Function call
    foo<int, int>(
        [](int a, int b) {}
    );
}
Run Code Online (Sandbox Code Playgroud)
<source>:16:5: error: no matching function for call to 'foo'
    foo<int, int>(
    ^~~~~~~~~~~~~

<source>:4:6: note: candidate template ignored: could not match
    'std::function<void (int, int, TArgs...)>' …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates metaprogramming function

16
推荐指数
1
解决办法
676
查看次数

标签 统计

c++ ×1

function ×1

lambda ×1

metaprogramming ×1

templates ×1