C++ Lambda:访问 lambda 中的静态方法会导致错误“未为此 lambda 函数捕获此错误”

2024-05-23

考虑以下代码:

//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));

class Singleton{
    public:
        static Singleton *instance();
        void foo();
        void bar();
    private:
        Singleton();
};

void Singleton::foo(){
    //this leads to an error ('this' was not captured for this lambda function)
    void(*func_pointer)(void) = []{
        Singleton::instance()->bar();
    };
    some_library_method(func_pointer);
}

我想调用一个我无法修改的函数(请参阅some_library_method上面)它需要一个函数指针作为参数。调用应该在类成员中完成foo()。我确实知道我无法访问那里的类成员,但我想做的就是以静态方式访问单例类(检索单例实例)。

有没有什么方法可以改革 lambda 表达式以向目标编译器 g++ v4.7.2 显示它确实如此not需要参考this?


以下解决方法有效:

template< typename T > T* global_instance() { return T::instance(); }

void(*func_pointer)(void) = []{
    global_instance<Singleton>()->bar();
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ Lambda:访问 lambda 中的静态方法会导致错误“未为此 lambda 函数捕获此错误” 的相关文章

随机推荐

  • Parsec.Expr 具有不同优先级的重复前缀

    Parsec Expr buildExpressionParser 的文档说 相同优先级的前缀和后缀运算符只能出现一次 即 如果 为前缀否定 则不允许使用 2 但是 我想解析这样的字符串 具体来说 考虑以下语法 sentence ident
  • 为动态加载的 HTML 内容触发 Bootstrap JS 行为

    我正在动态加载包含 Bootstrap 标记的 HTML 模板 但是 Bootstrap Javascript 行为不会应用于加载的内容 例如 如果加载的内容包含 Bootstrap 模式的标记 则该模式将无法正确运行 有没有办法可以触发
  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • 新 ASP.NET MVC 3 站点的 Razor 与 Webforms 视图引擎

    剃刀更漂亮 而且是新的 因此很酷 Webforms 是我已经熟悉的东西 当然 我毫无疑问会去学习新东西 Razor 但我听说有两个令我担心的缺点 无法轻松重用现有的 Web 表单控件 在极少数情况下 我可能需要拖动一些东西 我会重申 罕见
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • 依次构建完整的 B 树

    如果我有一组排序的数据 我想以最适合顺序读取和随机查找的方式将其存储在磁盘上 那么 B 树 或其中一个变体 似乎是一个不错的选择 假设该数据集并不全部适合 RAM 问题是可以从一组排序的数据构建完整的 B 树而不进行任何页面拆分吗 这样排序
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • 当使用 XHTML 严格且无 JavaScript 时,替代 target="_blank"!

    我需要严格使用 XHTML 我需要确保我的网站无需使用 JavaScript 即可运行 我需要从我自己的应用程序打开一个新的帮助窗口 当然 当没有检测到 javascript 时 我想使用 target blank 但这不是 XHTML 严
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • GDI+、JPEG 图像到 MemoryStream 中发生一般错误

    这似乎是整个网络上一个臭名昭著的错误 以至于我无法找到问题的答案 因为我的场景不适合 当我将图像保存到流中时 会引发异常 奇怪的是 这对于 png 来说效果很好 但是对于 jpg 和 gif 却给出了上述错误 这是相当令人困惑的 大多数类似
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE
  • 删除Vue子组件

    我真的被这个问题困扰了 我创建了一个由子组件组成的 Vue 2 0 组件 它全部都是 Webpacked 等 例如 这是父组件 div h1 This is just a title for lulz h1 div
  • 在哪里可以找到有关页面请求生命周期的详细教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 关于页面请求生命周期的详细教程 我已经阅读了 ASP NET 页面生命周期 我正在谈论 NET 进程开
  • Div 独特的 CSS 样式链接

    我想为单个特定 div 中的链接创建独特的样式 例如 我希望主体中的所有链接为粗体和红色 但在侧边栏 div 中我希望它们为蓝色和斜体 我该怎么办 I have a link color 666666 a visited color 003
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 使用 ansible 处理程序滚动重启

    我想运行一个 ansible playbook 它会安装一个服务 如果自上次运行以来发生任何更改 或多或少是 ansible 处理程序的规范用例 则重新启动它 但我想要一个不同的并行性用于安装而不是重新启动 我想一次在所有主机上安装 但是
  • 如何让位置音频在 SceneKit 中工作?

    我在使位置音频在 SceneKit 中工作时遇到问题 从 Xcode 生成的 SceneKit 游戏模板开始 我将以下代码添加到handleTap 方法的末尾 let ship scnView scene rootNode childNod
  • C++ Lambda:访问 lambda 中的静态方法会导致错误“未为此 lambda 函数捕获此错误”

    考虑以下代码 this is what I want to call I cannot modify its signature void some library method void fp void class Singleton p