使用C++17的内置函数std::size()来获取闭包的大小,从而可以比较它与std::function或指针的大小是否匹配。
示例代码如下:
#include
#include
int main()
{
auto lambda = [](){ std::cout << "Hello world!\n"; };
std::function func = lambda;
std::cout << "Size of lambda: " << sizeof(lambda) << '\n';
std::cout << "Size of std::function: " << sizeof(func) << '\n';
std::cout << "Size of pointer: " << sizeof(void*) << '\n';
std::cout << "Are sizes equal? " << (sizeof(lambda) == sizeof(func) && sizeof(lambda) == sizeof(void*)) << '\n';
// C++17: using std::size() to get the size of a closure
std::cout << "Size of lambda using std::size(): " << std::size(lambda) << '\n';
}
该示例创建一个lambda函数并将其存储在std::function对象中。然后,它使用sizeof运算符显示lambda函数、std::function对象和指针的大小,并使用std::size()函数显示lambda函数的大小。最后,它比较三者的大小是否相等。