访问类中的值类似于 boost::any

2024-02-15

我正在做一个简单的boost::any-类似用于教育目的的课程,但我不知道如何访问存储的值。我可以完美地设置该值,但是当我尝试访问“holder”类中的任何成员时,编译器只是抱怨在它派生的类中找不到该成员。我无法将成员声明为virtual因为模板。

这是相关代码:

class Element
{
    struct ValueStorageBase
    {
    };

    template <typename Datatype>
    struct ValueStorage: public ValueStorageBase
    {
        Datatype Value;

        ValueStorage(Datatype InitialValue)
        {
            Value = InitialValue;
        }
    };

    ValueStorageBase* StoredValue;

public:

    template <typename Datatype>
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage<Datatype>(InitialValue);
    }

    template <typename Datatype>
    Datatype Get()
    {
        return StoredValue->Value; // Error: "struct Element::ValueStorageBase" has no member named "Value."
    }
};

将虚拟函数添加到模板中很好 - 只是函数本身不能是模板。模板化的类或结构仍然可以有虚函数。你需要使用dynamic_cast的魔力。

class Element
{
    struct ValueStorageBase
    {
        virtual ~ValueStorageBase() {}
    };

    template <typename Datatype>
    struct ValueStorage: public ValueStorageBase
    {
        Datatype Value;

        ValueStorage(Datatype InitialValue)
        {
            Value = InitialValue;
        }
    };

    ValueStorageBase* StoredValue;

public:

    template <typename Datatype>
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage<Datatype>(InitialValue);
    }

    template <typename Datatype>
    Datatype Get()
    {
        if(ValueStorage<DataType>* ptr = dynamic_cast<ValueStorage<DataType>*>(StoredValue)) {
            return ptr->Value;
        else
            throw std::runtime_error("Incorrect type!"); // Error: "struct Element::ValueStorageBase" has no member named "Value."
    }
};

如果你改变 Get 返回一个Datatype*你可以返回NULL而不是扔。你也没有处理过之前值的内存StoredValue,但我将其留给你。

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

访问类中的值类似于 boost::any 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 按成员序列化

    我已经实现了template
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • Proguard 错误:参数号 12 中的未知选项“(”

    我无法使用 proguard 导出我的项目 我收到此错误并且没有解决方案 我不知道第 12 号参数在哪里 2013 05 14 17 38 39 LiveWallpaper Proguard returned with error code
  • Redux Form、Radio Button Fields、如何支持变量值?

    在我的 React Redux 表单中 我有以下内容 fieldset legend Radio buttons legend this props job titles map jobTitle gt div div fieldset
  • HTTP 状态 500 - 未找到提供程序 org.glassfish.json.JsonProviderImpl

    我在用netbeans 8 jdk 7 tomcat 8 05 我创建了一个网络应用程序netbeans并添加了javax jsonapi 到我的项目 代码显示没有错误 但是当我运行我的 servlet 时 出现以下错误 HTTP Stat
  • webpack-dev-server 代理到 docker 容器

    我有 2 个使用 docker compose 管理的 docker 容器 似乎无法正确使用 webpack 来代理某些请求到后端 api docker compose yml version 2 services web build co
  • 如何与 python 的子进程作为连续会话进行交互

    我需要在 python 中实现一个过滤器 它从 Linux 命令行字典工具中挑选出特定的输出 我需要 从文件中获取一组单词 查找每个单词 1 如果单词不包含 则跳过它 2 else 如果是动词 则保存定义 为了测试代码 我写了两个pytho
  • 尝试运行 org.hibernate.tool.ant.EnversHibernateToolTask​​ 时遇到很多绊脚石

    我正在尝试按照建议运行 org hibernate tool ant EnversHibernateToolTask恩弗斯的相当简洁的指南 http www jboss org envers downloads 表的第二行 文档有 PDF
  • Macos Catalina 更新后出现错误:无法运行 colorls

    更新至 macOSCatalina打开终端时出错 ERROR Can t find Ruby library file or shared library colorls usage dirname path Users varunsukh
  • 仅使用公式即可获取当前文化以进行本地化

    有没有办法使用 Excel 中的公式确定当前系统区域性不使用任何VBA代码 我想象这样简单的事情 IF CULTURE sk SK Preh ad Overview 或者类似的事情也适合我 IF CURRENCYSIGN Preh ad O
  • 仅备份 SQL 架构?

    我需要创建 SQL Server 2005 数据库的备份 该数据库只有结构 没有记录 只有架构 有什么办法可以做到这一点吗 编辑 我正在尝试创建一个备份文件以与旧进程一起使用 因此脚本无法满足我的目的 抱歉 使用 3 步流程 从工作数据库生
  • 通过网站从 PHP 服务器下载文件 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有物理文件 希望用户在我的网站上下载 这些文件位于 C xampp htdocs myfile uploads 我需要一个 PHP 脚本
  • 撤消 git Push 到 Assembla

    所以 今天我想做一件好事并重新排列我的存储库中的文件 致力于并推动我的Assembla存储库 由于我没有使用 git moving 命令 所有文件都丢失了历史记录 我意识到自己的错误 并希望摆脱不必要的改变 以便之后可以采取正确的行动 我尝
  • 将 Java-Pair-Rdd 转换为 Rdd

    我需要将 Java pair rdd 转换为 csv 所以我想将其转换为rdd 来解决我的问题 我想要的是改变我的rdd 从 Key Value Jack a b c to Key value Jack a Jack b Jack c 我认
  • 如何在ElasticSearch中不进行分析?

    我不想分析 ElasticSearch 字段中的一个字段 即 e 应逐字保存和比较 这些值将包含字母 数字 空格 破折号 斜杠以及可能的其他字符 如果我没有在该字段的映射中提供分析器 则默认情况下仍使用分词器将我的逐字字符串分解为单词块 我
  • 在 Ruby 中删除“@”符号及其后面的所有内容

    我正在开发一个应用程序 我需要将用户电子邮件地址中 符号之前的任何内容作为他 她的名字和姓氏传递 例如 如果用户有电子邮件地址 电子邮件受保护 cdn cgi l email protection 比当用户提交表单时我从电子邮件中删除 ex
  • Typescript - 导入 Express 不起作用

    我的应用程序中有这个 types express已安装依赖项 import express require express 它指向的是express并说this is an unexpected identifier当我运行我的服务器时 我
  • Memcached 守护进程是否可以在不终止进程的情况下释放未使用的内存?

    我相信您不能强制正在运行的 Memcached 实例取消分配内存 除非终止该 Memcached 实例 并释放它所持有的所有内存 有谁知道一份明确的文档 甚至是来自可靠来源的邮件列表或博客文章 可以证实或否认这种印象 据我了解 Memcac
  • Tkinter tkFileDialog 不存在[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 中的 Tkinter 显示打开的文件对话框 我发现的每个示例似乎都很容易使用 但它们都以以下行开头 import tkFileDialog 这行代码给我抛出了一个错误 说 No mo
  • MVC3 - 编译的 Razor 视图找不到 _ViewStart

    我在单独的类库中使用编译的 Razor 视图作为 MVC3 的一种插件系统 我遵循 Chris Van De Steed 的指南here http www chrisvandesteeg nl 2010 11 22 embedding pr
  • 如何使用 bin/www 为node.js heroku 部署编写Procfile?

    我正在尝试部署 Heroku 应用程序 我相信 procfile 可能是我的应用程序未部署的原因 我尝试了多种解决方案 包括 网络 节点 bin www 网络 npm 启动 我的应用程序无法运行可能还有另一个原因 但我想确保我的 Procf
  • 访问类中的值类似于 boost::any

    我正在做一个简单的boost any 类似用于教育目的的课程 但我不知道如何访问存储的值 我可以完美地设置该值 但是当我尝试访问 holder 类中的任何成员时 编译器只是抱怨在它派生的类中找不到该成员 我无法将成员声明为virtual因为