在assert()
的调用中是否可以使用lambda?
当我尝试以下内容时......
assert([&]() -> bool{
sockaddr_storage addr; int addrlen = sizeof(addr);
return (getsockname(this->m_Socket, (sockaddr*)&addr, &addrlen) != 0) ? false : true;
});
...我收到错误
错误C2675:一元'!' :'`anonymous-namespace'::'没有定义此运算符或转换为可接受的类型 预定义运算符
答案 0 :(得分:8)
当然,但断言真的只需要一个布尔值;不是lambda,所以你必须自己调用它(假设你的lambda是一个返回你想要断言的东西):
assert(([&]() -> bool{
sockaddr_storage addr; int addrlen = sizeof(addr);
return getsockname(this->m_Socket, (sockaddr*)&addr, &addrlen) == 0;
})());
答案 1 :(得分:2)
你不能断言lambda本身是“真的”,因为lambdas没有真实性的概念。
如果要调用lambda并声明其返回值为true,则需要调用它:
assert([&]() -> bool{
sockaddr_storage addr; int addrlen = sizeof(addr);
return getsockname(this->m_Socket, (sockaddr*)&addr, &addrlen) == 0;
}());
^^
我还将lambda的第二行改为比你的代码更有意义的东西。