我已经成功编写了一个像这样的类,在一个被定义为所述类的非静态属性的lambda中捕获它:
#include <memory>
#include <iostream>
#include <functional>
struct S
{
S()
{
std::cout << "S::S()[" << this << "]" << std::endl;
}
std::string y_{"hi mate"};
int x_;
std::function<void(int*)> del_{[this](int *ptr)
{
std::cout << "Deleting ptr[" << ptr << "] this[" << this << "] this->y_[" << this->y_ << "]" << std::endl;
}};
std::unique_ptr<decltype(x_), decltype(del_)> unique_{&x_, del_};
};
int main()
{
S s;
}
Run Code Online (Sandbox Code Playgroud)
这编译并且似乎运行得很好.
但是,对于模板化的类,它不再起作用:
#include <memory>
#include <iostream>
#include <functional>
template <typename>
struct S
{
S()
{
std::cout << …Run Code Online (Sandbox Code Playgroud)