c++ - 如何在 C++ 中使用 Null Lambda?

标签 c++ c++11 lambda

我想声明一个这样的函数:

template <typename Lambda>
int foo(Lambda bar) {
    if(/* check bar is null lambda */)
        return -1;
    else
        return bar(3);
}

int main() {
    std::cout << foo([](int a)->int{return a + 3;}) << std::endl;
    std::cout << foo(NULL_LAMBDA) << std::endl;
}

那么,如何声明NULL_LAMBDA和条件检查通过的lambda函数是否为null?

最佳答案

您可以添加专门的特化:

#include <iostream>
#include <cstddef>

template<typename Lambda> int
foo(Lambda bar)
{
    return(bar(3));
}

template<> int
foo<::std::nullptr_t>(::std::nullptr_t)
{
    return(-1);
}

int main()
{
    ::std::cout << foo([] (int a) -> int {return(a + 3);}) << ::std::endl;
    ::std::cout << foo(nullptr) << ::std::endl;
}

关于c++ - 如何在 C++ 中使用 Null Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45727933/

相关文章:

c++ - 启用默认初始化列表构造函数

amazon-web-services - API 网关是否引入了显着延迟?

Java 8 只映射到值类型集合

java - 使用 Java/JNI 时 Linux 上的信号处理

c++ - 运算符重载 C++

c++ - 在静态函数的 lambda 中捕获相当于 'this' 的值

c++ - 通过引用返回 vector

java - Java 8 中的 IntStream forEach 方法

c++ - 如何比较自定义类的 std::variant?

c++ - 仅在根节点上运行回调