为什么我不能使用 boost::variant 访问这个自定义类型?

2023-12-14

下面的代码:

#include <boost/variant.hpp>
#include <iostream>
#include <string>

struct A
{
    A()
    {
    }
    ~A() throw()
    {
    }
    A& operator=(A const & rhs)
    {
        return *this;
    }

    bool operator==(A const & rhs)
    {
        return true;
    }

    bool operator<(A const & rhs)
    {
        return false;
    }
};

std::ostream & operator<<(std::ostream & os, A const & rhs)
{
    os << "A";
    return os;
}

typedef boost::variant<int, std::string, A> message_t;

struct dispatcher_t : boost::static_visitor<>
{
    template <typename T>
    void operator()(T const & t) const
    {
        std::cout << t << std::endl;
    }
};

int main(int argc, char * const * argv)
{
    message_t m("hi");
    boost::apply_visitor(dispatcher_t(), m);
    message_t a(A());
    boost::apply_visitor(dispatcher_t(), a);
}

产生以下错误。

In file included from /usr/include/boost/variant/apply_visitor.hpp:17,
                 from /usr/include/boost/variant.hpp:24,
                 from main.cpp:2:
/usr/include/boost/variant/detail/apply_visitor_unary.hpp: In function ‘typename Visitor::result_type boost::apply_visitor(const Visitor&, Visitable&) [with Visitor = dispatcher_t, Visitable = message_t(A (*)())]’:
main.cpp:51:   instantiated from here
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: request for member ‘apply_visitor’ in ‘visitable’, which is of non-class type ‘message_t(A (*)())’
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:72: error: return-statement with a value, in function returning 'void'

我最初只是尝试使用一个非常简单的 A 但我试图满足everyBoost.Variant 对 BoundedTypes 提出了要求。曾经是一个

struct A {};

访问者可以很好地处理字符串值,但甚至无法编译访问 A 的尝试。我正在使用 gcc-4.4.5。有任何想法吗?


message_t a(A());

具有最令人烦恼的解析问题:声明一个函数而不是创建一个变量。解决方法有很多,例如message_t a = A();

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

为什么我不能使用 boost::variant 访问这个自定义类型? 的相关文章

  • Postsharp 不登录跟踪级别

    我喜欢在跟踪级别记录一些 Postsharp 消息 不幸的是 日志到这个级别没有打印任何输出 所有其他级别都在工作 与控制台或 NLog 后端或从其他类登录时的行为相同 如何启用跟踪级别 应用程序 xaml cs Log Attribute
  • 为什么在 lambda 内部引发异常是 C# 7 的一项功能? [复制]

    这个问题在这里已经有答案了 该语句在 VS2015 中无法编译 但在 VS2017 中可以编译 var example new Action gt throw new Exception 为了支持在 lambda 表达式内抛出异常 必须对
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 如何在 C 语言中获取输入中的空格

    我想从控制台获取字符数组 它还包含空格 我在 C 中知道的唯一方法是 scanf 但是一旦遇到空格 它就会停止接受输入 我该做什么 这就是我正在做的事情 char address 100 scanf s address 尝试使用 fgets
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • 如何在 stl 模板中使用导出类 (__declspec(dllexport))?

    我正在使用导出的类 class declspec dllexport myclass private template declspec dllexport class std map
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 如何使用 .NET 捕获我的桌面视频?

    我想知道是否有任何方法可以使用 NET 捕获我的桌面的视频 截屏视频 我并不是在寻找截屏软件 而只是在寻找一种可以让我自己生成桌面视频的技术 我想过拍摄多个屏幕截图 但我不确定如何以编程方式生成带有图像序列的视频 有人有主意吗 Thanks

随机推荐

  • ASP.NET MVC2 项目的 DDD 架构

    我正在尝试将域驱动开发 DDD 用于我的新 ASP NET MVC2 项目和 Entity Framework 4 经过一些研究 我在自己的类项目中对每个层提出了以下层约定 我的公司 域 public class User Contains
  • 如果使用java满足某些条件,如何为某一行设置颜色?

    我有一个jtable 表格摘要 其中一栏是 EXPIRY 我想突出显示客户的行 其到期日已在当前日期失效 我已经有了逻辑 但我无法使该行变成红色或任何其他颜色 这是我的代码 int count tableSummary getRowCoun
  • “\n”分隔符问题

    我有一个 stringbuilder 对象 其中添加了一行数据 添加每一行后 我在末尾附加一个 n 以指示新行 这个 stringbuilder 对象最终确定后被写入一个平面文件 当我在记事本中打开平面文件时 每行后面都会出现一个小矩形 并
  • Twitter API 更新限制错误 403

    我正在尝试使用 twitter4j api 从 twitter api 检索数据 一段时间后检索数据我收到以下错误 Exception in thread main 403 The request is understood but it
  • JQgrid动态添加Dropdown

    我想在 JQGrid 中动态添加下拉菜单 例如 我有以下类型的网格 现在 当我单击按钮时 应在网格中添加一个新行 对于新行 第一列数据将是下拉列表 第二个超链接 第三个下拉列表和第四个复选框 即它应该与第一行相同 对于每个按钮 单击新行时应
  • 什么可能导致 System.TypeLoadException?

    我正在使用 C 使用 VS2008 开发 Honeywell Dolphin 6100 的应用程序 Honeywell Dolphin 6100 是一款带有条形码扫描仪的移动计算机 使用类似 Windows CE 5 0 的操作系统 我想添
  • 无法通过 Azure Powershell 在新应用程序注册模块中设置“preAuthorizedApplications”对象

    简短的场景 多租户前端 javascript React JS Web 应用程序从浏览器调用多租户 ASP NET Core 2 2 WebAPI 验证 当用户登录时 基于用户的原始 Azure Active Directory 前端应用程
  • self = [超级初始化] 重新审视

    我偶然发现了这个帖子在 Objective C 中 为什么我应该检查 self super init 是否不为零 我能够了解这个语法 id initWithString NSString aString self super init if
  • 带有controlsfx通知组件的javafx NullPointerException

    我想开发一个使用controlsfx通知在系统托盘模式下显示一些通知的应用程序 在正常模式下 我的应用程序运行良好 并且可以成功显示通知 但是当我在系统托盘中隐藏阶段时 会发生 NullPointerException 我不知道如何解决这个
  • 将多个 pandas 数据帧导出到 csv 文件的最有效方法是什么?

    我有多个 pandas 数据框 df1 df2 df3 我想将它们全部导出到 csv 文件 df1 to csv df1 csv index False df2 to csv df2 csv index False df3 to csv d
  • 以两个不同的名称将 docker 容器添加到网络

    我正在尝试新的 docker 网络功能 我使用容器链接将旧设置迁移到新的桥接网络 到目前为止 我已经在同一主机上的多个容器之间启动并运行了专用桥接网络 现在我正在寻找一种方法来复制同一容器的多个链接别名 假设我有一个名为myBox加入 do
  • 只需从 PHP 中的字符串获取图像 URL [重复]

    这个问题在这里已经有答案了 从这样的字符串 img src images mylondon jpg 我正在尝试检索仅在 PHP 中其他地方使用的 url 我知道正则表达式是可行的方法 但我现在无法理解它们 有人可以帮忙吗 preg matc
  • DBGrid 停止当前行移动

    使用 d5 TDBGrid SQLite3 和 ZEOS 数据库有 2000 个项目 一列是 Active 布尔值 第二列是 ItemName 文本 IndexFiledNames 是 ItemName OnDblclick 切换 活动 开
  • Apache 中用于 POST/DELETE/PUT 的 URL 重写

    我的网址是这样的 http 10 243 123 1 v1 data register 我想重定向 重写这个网址到 https 10 243 123 1 data register This is HTTP POST PUT DELETE
  • 添加新行时,Google 表格条件格式会发生变化

    因此 我单击 A 和 1 之间的单元格来选择整个工作表 然后单击 格式 然后单击 条件格式 并设置规则 基本上 我有大约 15 种不同的条件 但所有条件都在 F 到 O 列中 所以我使用 F O 例如 如果文本恰好是 是 则将背景更改为绿色
  • 如果水平进度条位于工具栏上方,则不可见(适用于 Android 5)

    我尝试通过以下 XML 将水平进度条放置在工具栏顶部 my activity xml
  • hadoop getmerge到另一台机器

    是否可以存储输出hadoop dfs getmerge命令到另一台机器 原因是我的本地机器没有足够的空间 作业输出为 100GB 我的本地存储为 60GB 另一个可能的原因可能是我想在另一台机器上本地处理另一个程序中的输出 并且我不想将其传
  • R data.table 使用标准名称创建新列

    我想根据比率计算为我的 data table 创建新列 我的变量的名称有点标准 所以我认为必须有一种方法可以轻松实现这一点数据表 但是我不知道如何实现这一点 以下是我的示例数据和代码 set seed 1200 ID lt seq 1001
  • 复数 FFT 然后逆 FFT MATLAB

    我正在使用 Matlab 中的 FFT 函数来尝试分析行波激光模型的输出 模型的时域形式为 实数 虚数 其思想是将 FFT 应用于复数输出 以获得频域中的相位和幅度信息 load time domain field data data lo
  • 为什么我不能使用 boost::variant 访问这个自定义类型?

    下面的代码 include