Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GoogleTest框架似乎不适用于Lambda函数(后续)_C++_C++11_Exception_Lambda_Googletest - Fatal编程技术网

C++ GoogleTest框架似乎不适用于Lambda函数(后续)

C++ GoogleTest框架似乎不适用于Lambda函数(后续),c++,c++11,exception,lambda,googletest,C++,C++11,Exception,Lambda,Googletest,这是我最后一个问题的后续问题: 该案例中提到的解决方案适用于该特定案例,也就是说,lambda中模板类的构造函数可以包装在paranthese中,构建就会成功。我接受了这个答案。但问题仍然存在,谷歌测试框架似乎不能与Lambda函数一起工作。我在文档中没有看到这方面的内容 我做了下面的测试 TEST(errorhandlingInterpolator, NOTtoolargeInput) { ASSERT_NO_THROW(throw); } 这会导致测试失败。好 然后我就这样做了,

这是我最后一个问题的后续问题:

该案例中提到的解决方案适用于该特定案例,也就是说,lambda中模板类的构造函数可以包装在paranthese中,构建就会成功。我接受了这个答案。但问题仍然存在,谷歌测试框架似乎不能与Lambda函数一起工作。我在文档中没有看到这方面的内容

我做了下面的测试

TEST(errorhandlingInterpolator, NOTtoolargeInput) {
    ASSERT_NO_THROW(throw);
}
这会导致测试失败。好

然后我就这样做了,

TEST(errorhandlingInterpolator, NOTtoolargeInput) {
        ASSERT_NO_THROW([](){throw;});
}
这将导致测试不会失败。奇怪

因此,为了彻底了解(一些非常琐碎的事情),我测试了以下内容

void dummy() { throw; }

TEST(errorhandlingInterpolator, NOTtoolargeInput) {
        ASSERT_NO_THROW(throw);
}
异常导致测试失败。一切都好

这在我的脑海中升起了一个旗帜,异常甚至可以与lambda函数一起工作。我以为它们和普通函数一样,除了匿名函数。显然是的。以下两个问题讨论了这一点


因此,它确实似乎归结为这样一个事实:google测试框架中的宏不与lambda函数一起工作。

ASSERT_NO_THROW([](){THROW;})中的表达式不执行异常,它只是声明一个lambda,然后被丢弃,因为它没有分配给任何对象


你想要断言不抛出([](){THROW;}()),它会立即尝试执行lambda。

我想哭。我对我的羔羊羊不太了解,于是我就开始胡扯一些无关的事情(是的!似乎合法。这就是问题所在。谢谢!