无法从 std::bind 推导出 std::function 的模板参数

2023-12-11

我试图找到一种方法来调用许多类成员函数,每个类成员函数都有不同的参数,并且在调用之前和之后发生某些已知的功能。

这个包装函数是我尝试过的,但是例如对它的最终调用不会编译错误:

'bool Wrapper(Work * ,std::function,Args &&...)' :可以 不推断模板参数 'std::function' 来自 'std::_Bind,Work *const >'

class Work
    {
    public:
        void DoWork(int a, double b, string c);

    private:
        void Pre() {};
        void Post() {};
        bool Step1() { return true; }
        bool Step2(int) { return true; }
        bool Step3(double, string) { return true; }
    };

template<typename... Args>
bool Wrapper(Work *work, std::function<bool(Args...)> func, Args&&... args)
    {
    work->Pre();
    bool ret = func(std::forward<Args>(args)...);
    work->Post();
    return ret;
    }

void Work::DoWork(int a, double b, string c)
{
    if (!Wrapper<>(this, std::bind(&Work::Step1, this))) // error
        return;
    if (!Wrapper<int>(this, std::bind(&Work::Step2, this), a)) // error
        return;
    if (!Wrapper<double, string>(this, std::bind(&Work::Step3, this), b, c)) // error
        return;
}

int main()
{
    Work work;
    work.DoWork(1, 2.0, "three");
    return 0;
}

(将前置和后置功能放在步骤中乍一看似乎更可取,但这是不可取的,因为上面是实际代码的一个非常简化的示例,并且步骤有多个返回位置,并且没有测试。)

我认为显式模板参数将使模板解析成为可能。我究竟做错了什么?


返回类型为std::bind或 lambda 不是std::function哪一个是不明确的std::function从它们构建。

一种解决方案是允许任何函子并且不使用std::function

template<typename F, typename... Args>
bool Wrapper(Work &work, F&& func, Args&&... args)
{
    work.Pre();
    const bool ret = std::forward<F>(func)(std::forward<Args>(args)...);
    work.Post();
    return ret;
}

Demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 std::bind 推导出 std::function 的模板参数 的相关文章

  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 错误 C2065:'cout':未声明的标识符

    我正在处理我的编程作业的 驱动程序 部分 但我不断收到这个荒谬的错误 错误 C2065 cout 未声明的标识符 我什至尝试过使用std cout但我收到另一个错误 IntelliSense 命名空间 std 没有成员 cout 当我宣布u
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 如何覆盖 Template Toolkit 模板文件中的 WRAPPER?

    有没有办法禁用WRAPPER那是设置在新的 配置 http search cpan org dist Template Toolkit lib Template pm 通过模板或临时覆盖parse 我想要一个默认值WRAPPER 我将用于
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • Json.net 将数字属性序列化为字符串

    我正在使用 JsonConvert SerializeObject 序列化模型对象 服务器期望所有字段都是字符串 我的模型对象具有数字属性和字符串属性 我无法向模型对象添加属性 有没有办法将所有属性值序列化为字符串 我必须只支持序列化 而不

随机推荐

  • Python2 和 Python3:__init__ 和 __new__

    我读过其他问题来解释两者之间的区别 init and new 但我只是不明白为什么在下面的代码中用 python 2 输出 init 和Python3 new init 示例代码 class ExampleClass def new cls
  • 在 iOS 导航栏上放置标签、按钮

    我创建了自定义导航控制器 我想添加 左侧是日期 右侧是后退按钮 后退按钮旁边是标题 我尝试添加一个标签 但不起作用 请告诉我一个方法 UINavigationBar naviBarObj UINavigationBar alloc init
  • gcc 和 g++/gcc-c++ 有什么区别?

    在我看来 gcc 可以处理 c 和 c 项目 那么为什么需要 g gcc c 呢 g 和 gcc c 有什么区别 gcc如果文件具有适当的扩展名 则将 C 源文件编译为 C 将 C 源文件编译为 C 但是它不会自动链接到 C 库中 g 将自
  • “ON CONVERSION ERROR”失败并显示“ORA-43918:此参数必须是文字”

    ON CONVERSION ERROR应允许转换函数处理诸如 ORA 01858 在需要数字的地方发现非数字字符 之类的错误 但是当我使用该功能时 我只会收到不同的错误 SQL gt select to date the date defa
  • 将“CallLog.Calls”存储到另一个表中

    我需要使用什么样的查询 将 CallDB 创建为 从 CallLog Calls 中选择 我想将整个通话记录存储到另一个表中进行处理 因为我读到 calllog calls 只有最后 500 条记录 好吧 我自己做了一个解决方案 不知道它是
  • SQL Server批量插入

    我想将一列文本文件导入到我的 SQL 表之一中 该文件只是脏话列表 我编写了以下 TSQL 来执行此操作 BULK INSERT SwearWords FROM c swears txt WITH FIELDTERMINATOR ROWTE
  • Scapy多次嗅探数据包?

    我正在使用 Scapy 通过使用以下代码来捕获数据包 from scapy all import def verify p p display sniff prn verify iface lo 嗅探功能多次捕获每个数据包 例如 如果我有一
  • RecyclerView 加载更多内容并出现 ProgressBar 错误

    我正在尝试创建RecyclerviewonLoadMore 与ProgressBar在底部 我试过了这个解决方案 但是我的方法 onLoadMoreActivity从未被调用过 请帮我 这是我的Adapter public class Ne
  • 使用 Realm studio 打开我的领域文件时出现问题

    我无法在领域工作室中打开 default realm 文件 这是我收到的错误 此版本的 Realm 不支持打开格式版本 20 的 Realm 文件 我在 stackoverflow 上看到了类似的问题 但没有任何答案 领域工作室版本 5 0
  • String.intern() 的性能损失

    很多人谈论 String intern 的性能优势 但实际上我更感兴趣的是性能损失可能是什么 我主要关心的是 搜索成本 intern 确定常量池中是否存在可内部字符串所花费的时间 该成本如何随着池中字符串的数量而变化 同步 显然常量池是整个
  • 无法使用 spring javamail 从服务器 heroku 发送电子邮件

    我尝试从以下位置发送电子邮件Heroku using 春季javamail 但出现错误 我的代码 import org springframework mail MailSender import org springframework m
  • Git - git-svn 克隆后删除远程分支

    我已经使用以下命令克隆了 SVN 存储库git svn clone trunk trunk tags tags branches branches 该操作已正确执行 现在当我列出我的分支时 我拥有所有过去的标签 例如 git branch
  • 将样式应用于 Android ListView

    我想在我的应用程序中设置 lisview 的样式 如下图所示 我尝试通过应用渐变来开发它 list item normal 的代码是
  • 具有自定义视图的堆叠式 ActionBar 选项卡未正确显示

    使用操作栏选项卡时 有时当选项卡内容对于显示来说太大时 它们会显示为 堆叠 当我对选项卡内容使用自定义视图时 会出现问题 它会导致所选选项卡不会显示在下拉列表中 并且一旦选择选项卡 下拉列表就会消失 并出现小的空选项卡 Here is a
  • Aho-Corasick 整个单词的文本匹配?

    我正在使用 Aho Corasick 文本匹配 想知道是否可以更改它以匹配terms而不是字符 换句话说 我希望术语而不是字符成为匹配的基础 举个例子 搜索查询 他 句子 你好世界 Aho Corasick 会将 he 与以索引 2 结尾的
  • 播放视频 android 时未捕获第一次按后退按钮

    我有一个奇怪的错误 我不知道如何修复 我有一个视频播放器 一个播放视频的简单视频视图 现在我已经实现了逻辑 以便当用户按下后退按钮时 它告诉他再次按下后退按钮以退出 当他这样做时 它就会退出 但问题是第一次背压没有被抓住 我不知道是什么原因
  • 如果我想使用单个 UIMA 依赖库,是否需要重写整个 java 项目?

    我想用https code google com p heideltime 在一个java项目中 该代码 适合 UIMA 管道 这是我根本不理解的 UIMA 看起来像是为了解决大量我没有的问题而设计的 所以我只想获得运行该代码所需的最少量的
  • 如何保护 C++03 和 C++11 的移动构造函数?

    这类似于在运行时可以检测到 C 03 和 C 11 之间的哪些差异 如果有 但在这种情况下 我希望通过预处理器进行检测 我们该如何守护移动构造函数 and 移动作业 当源代码同时用于 C 03 和 C 11 时 以下是否足够 是移动语义所有
  • 什么时候意图额外在活动之间变得无效?

    我在活动之间接收意图额外内容时遇到问题 在我的 MainActivity 中 我启动 Gallery 活动来选择外部 SD 卡上的视频文件 public class MainMenu extends Activity Button chan
  • 无法从 std::bind 推导出 std::function 的模板参数

    我试图找到一种方法来调用许多类成员函数 每个类成员函数都有不同的参数 并且在调用之前和之后发生某些已知的功能 这个包装函数是我尝试过的 但是例如对它的最终调用不会编译错误 bool Wrapper Work std function Arg