小编pyr*_*yro的帖子

在模板化类和非模板化类中的lambda属性中捕获它

我已经成功编写了一个像这样的类,在一个被定义为所述类的非静态属性的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)

c++ lambda templates c++11 gcc4.9

7
推荐指数
1
解决办法
178
查看次数

标签 统计

c++ ×1

c++11 ×1

gcc4.9 ×1

lambda ×1

templates ×1