如何防止为未实现方法的对象生成模板

2023-12-12

因此,出于示例的目的,假设我有 3 个简单的struct是,其中第二个不包含bar method:

struct one {
    void foo(const int);
    void bar();
};

struct two {
    void foo(const int);
};

struct three {
    void foo(const int);
    void bar();
};

然后我有一个struct它将管理这些类型的对象:

struct owner {
    map<int, one> ones;
    map<int, two> twos;
    map<int, three> threes;

    template <typename T, typename Func>
    void callFunc(T& param, const Func& func) {
        func(param);
    }

    template <typename T>
    void findObject(int key, const T& func) {
        if(ones.count(key) != 0U) {
            callFunc(ones[key], func);
        } else if(twos.count(key) != 0U) {
            callFunc(twos[key], func);
        } else {
            callFunc(threes[key], func);
        }
    }

    void foo(const int key, const int param) { findObject(key, [&](auto& value) { value.foo(param); } ); }
    void bar(const int key) { findObject(key, [&](auto& value) { value.bar(); } ); }
};

当我尝试编译这个时,我得到:

error: struct two没有指定成员bar

有什么办法可以解决这个问题吗?

Live Example


首先,公用事业。其中一个是我们最喜欢的overload展示了三个 C++17 功能,并重载了operator()几个函数对象,全部在两行中。

template<class... Ts> struct overload : Ts... { using Ts::operator()...; };
template<class... Ts> overload(Ts...) -> overload<Ts...>;

然后是 Accept-Everything 后备标签类型:

struct fallback_t { template<class T> fallback_t(T&&) {} };

现在来看看通话本身。我们通过将原始通用 lambda SFINAE 放入value.bar()调用尾随返回类型,然后使用后备重载对其进行重载,如果实际调用,该后备重载具有未定义的行为(因为OP“省略[ted]任何显式行为定义”):

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

如何防止为未实现方法的对象生成模板 的相关文章

  • aws Lambda 在 S3 上传时使 CloudFront 失效

    我同时上传 10 50 个文件 Lambda 会为每个更新的文件触发一个事件 如果文件大小发生变化 因此 我不想一一失效 50x 而是想运行通配符 上传结束时出现一次字符 任何人都可以阐明如何实现这一目标 谢谢 如果我正确理解你的问题 你的
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何重定向到另一个页面并从表中传递 url 中的参数?

    如何重定向到另一个页面并从表中传递 url 中的参数 我在龙卷风模板中创建了类似的东西 table thead tr th Username th th Nation th th Rank th th th tr thead tbody f
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何在 Django 模板上使用 if/else 条件?

    我将以下字典传递给渲染函数 源是字符串列表 标题是可能等于源中字符串之一的字符串 title title sources sources 在 HTML 模板中 我想完成以下几行内容 for source in sources tr td s
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • 在自身内部定义结构对象时出现问题

    这有效 struct LD 32 struct LD 32 ld 但这并没有 struct LD 32 struct LD 32 ld 为什么是这样 正如 pmg 猜测的那样 我将其编译为 C 代码 已编辑 C 中的结构体不能包含类型不完整
  • SLComposeViewController 共享教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 使用 iOS 6 的新功能需要遵循哪些步骤SLComposeViewController发布到 Facebook Twitter 或新浪微博 有关此框架的详细信息 请参阅 Apple
  • Gtk.TreeView 中的 Gtk.Entry (CellRenderer)

    我想打包一个Gtk Entry with Gtk EntryCompletion连接 到一个单元格中Gtk TreeView 有谁知道如何做到这一点 我只需要在表格视图中完成文本输入的输入 我是否需要子类化Gtk CellRenderer
  • 如何以编程方式关闭 iPhone 应用程序中的所有其他应用程序?

    是否可以在我自己的应用程序中以编程方式关闭 iPhone 上除我自己的应用程序之外的所有正在运行的应用程序 如果是这样 怎么办 不可以 所有应用程序都在沙箱中运行 因此您无法在它们之间进行通信 即使你在技术上可以 这也会被认为是不好的做法
  • 提交表格给自己

    目前 我有一个带有输入 文本 和一个提交表单的按钮的表单 该表格被发布到 submit php 我希望将表格发布到与表格相同的页面 我怎样才能做到这一点
  • 使用 boost::spirit::x3 从 std::string 解析为 boost::string_view

    In my 我之前的问题有人建议我的表现boost spirit x3可以通过解析为来改进解析器boost string view使用raw指示 但是 我很难编译它 这是我发现的 Before x3 一个人必须专攻assign to att
  • JAXB:第三方或外部超类上的 @XmlTransient

    我需要有关 JAXB 2 1 的以下问题的一些帮助 示例 我创建了一个扩展抽象类 Person 的 SpecialPerson 类 现在我想使用 JAXB 将对象结构转换为 XML 模式 因此 我不希望 Person XML 类型出现在我的
  • onload() 和 $.ready 之间的区别?

    你能列出之间的区别吗onload and document ready function 使用 jQuery 中的函数 the load窗口和 或主体元素上的事件 又名 onload 将触发一次all页面内容已加载 这包括所有图像 脚本等
  • 解析 Excel 文件并读取单元格

    我有一个excel文件 我已经上传了截图 我需要编写一个 NET应用程序 控制台应用程序 来解析excel文件 您可以看到一个标题为 函数名称 的单元格 我的 NET 应用程序应该找到该特定单元格并读取该列中的内容 例如模板 Instanc
  • 如何在javascript中获取服务器时区

    我想在 Javascript 中设置不同的时区 当前它显示本地计算机或客户端 PC 日期 时区的日期和时区 Regards Javascript 是一种客户端语言 不会以这种方式与服务器交互 您需要从服务器端平台获取该数据 下面是一些 PH
  • 在空 JTextField 中按下退格键时禁用蜂鸣声

    初学者在这里 有谁知道一种快速简便的方法 可以让 JTextField 在按下退格键且字段为空时不发出蜂鸣声 我在网上看到了一些关于更改 DefaultEditorKit 的内容 但我无法理解 任何帮助将不胜感激 这段代码对我有用 Acti
  • AdSense IAB TCF 错误 3.3:如何删除旧字符串并重新获得同意

    我的网站已经上线几年了 使用 AdSense 及其集成的 GDPR 内容功能 即在 IAB TCF 术语中 Google 充当 CMP 在过去的几周里 我收到了以下消息 我们检测到您的一个或多个网站或应用程序上的 IAB TC 字符串存在问
  • 为什么java无法从死锁中恢复?

    我正在读 Java Concurrency in Practice 一书 里面是关于死锁的内容 JVM无法从死锁中恢复 只有摆脱死锁的方法 lock就是重启服务器 还提到了JVM使用graph 搜索其中线程充当两个线程 A 之间的图节点和边
  • Oracle SQL - 识别顺序值范围

    这是我的桌子 ID Name Department 1 Michael Marketing 2 Alex Marketing 3 Tom Marketing 4 John Sales 5 Brad Marketing 6 Leo Marke
  • 调用窗口加载事件 - javascript

    我将尽力在这里不使用 jsfiddle 清楚地解释我的问题是什么 因为 window on load 不会在他们的 IDE 中触发 我有一个 html 包装器 它动态加载 ajax html 到div content div class h
  • 在 ASP.NET MVC 3 中添加您自己的 HtmlHelper

    我是 MVC 新手 我正在尝试创建自己的扩展方法 以便我可以添加到我的 razor 视图中可用的 html 帮助器中 Html DropDownListFor 允许您为模型上的任何属性创建下拉列表 我想创建一个名为的助手Html State
  • 替换 jQuery 中选定的 HTML 文本

    我有这个代码用于替换选定的文本 它在选定的文本之前和之后放置 1 和 2 var content text html if window getSelection not IE case var selObj window getSelec
  • 如何获取Meteor包中文件的路径?

    我知道怎么做从 Meteor 包中获取当前目录 但是如何获取项目中特定文件的路径呢 node s dirname and filename在流星中不起作用 这很复杂 meteor run将您的项目文件复制到内部的目录树中
  • --oaa 2 和 --loss_function=logistic 在 Vowpal Wabbit 中的效果

    我应该在 VW 中使用哪些参数来执行二元分类任务 例如 让我们使用rcv1 small dat I thought最好使用逻辑损失函数 或铰链 但使用没有意义 oaa 2 然而 经验结果 所有 4 个实验中报告的渐进验证 0 1 损失 表明
  • 如何防止为未实现方法的对象生成模板

    因此 出于示例的目的 假设我有 3 个简单的struct是 其中第二个不包含bar method struct one void foo const int void bar struct two void foo const int st