C++ boost enable_if问题

2024-04-16

我有什么办法可以简化以下陈述吗?(可能,使用boost::enable_if).

我有一个简单的类结构 -Base基类,Derived1, Derived2继承自Base.

我有以下代码:

template <typename Y> struct translator_between<Base, Y> {
   typedef some_translator<Base, Y> type;
};

template <typename Y> struct translator_between<Derived1, Y> {
   typedef some_translator<Derived1, Y> type;
};

template <typename Y> struct translator_between<Derived2, Y> {
   typedef some_translator<Derived2, Y> type;
};

我想使用一个模板专业化来编写相同的语句translator_between.

我希望能够编写的示例(伪代码):

template <typename Class, typename Y>

ONLY_INSTANTIATE_THIS_TEMPLATE_IF (Class is 'Base' or any derived from 'Base')

struct translator_between<Class, Y> {
   typedef some_translator<Class, Y> type;
};

任何方法来实现这一点使用boost::enable_if and boost::is_base_of?


首先,您必须在以下选项中做出选择:

  • is_base_of
  • is_convertible

两者都可以在中找到<boost/type_traits.hpp>,后者更加宽容。

如果您只是想阻止某种组合的此类实例化,请使用静态断言:

// C++03
#include <boost/mpl/assert.hpp>

template <typename From, typename To>
struct translator_between
{
  BOOST_MPL_ASSERT((boost::is_base_of<To,From>));
  typedef translator_selector<From,To> type;
};

// C++0x
template <typename From, typename To>
struct translator_between
{
  static_assert(boost::is_base_of<To,From>::value,
                "From does not derive from To");
  typedef translator_selector<From,To> type;
};

由于此处没有发生重载决策,因此您不需要enable_if.

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

C++ boost enable_if问题 的相关文章

  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 如何模拟.net应用程序内存不足?

    好吧 我必须调试内存分配问题 随着时间的推移 应用程序会耗尽内存 我需要为 net 窗口应用程序模拟低内存系统 作为更快地重现内存不足问题的方法 PS 我的初步调查表明 内存泄漏是在应用程序分配非托管资源 托管 DX 时发生的 编写另一个程
  • 使用 EF PowerTools 逆向工程代码优先更改生成的上下文文件的名称

    我一直在尝试弄清楚如何制作 EF Power Tools Reverse Engineer Code First对生成的上下文文件使用不同的名称 比现在使用的要好 Example 我有一个名为我的 Awesome Dev Database
  • Web 服务器找不到请求的资源

    我在 VS 2008 SP1 上有一个 NET 3 5 Web 应用程序 在 Vista Ultimate 32 SP1 上运行 我在默认网站下创建了一个应用程序 所以应用程序的网址是 http localhost mysite http
  • Openlayers 3:以编程方式选择功能

    我正在尝试将我的系统从 Openlayers 2 升级到 Openlayers 3 但我遇到了一个我似乎无法解决的特定问题 我的应用程序有一个网格和一张地图 当用户单击网格时 我想选择地图上的相关点 在 Openlayers 2 中我使用了
  • 在 Ruby On Rails 上学习 BDD 的途径是什么?

    我想在 Ruby On Rails 上启动 BDD 我应该学习什么 我对 BDD RSpec 或 Cucumber 一无所知 最好的学习方式是什么 教程 涵盖 我应该测试什么行为 之类的内容 ETC thanks RSpec 特定 我保留这
  • 有没有办法在 Chrome 和/或 IE 中使用 JS 选择多个文本区域?

    Firefox 3 可以使用 JS 选择多个文本区域 有没有办法在 Chrome 和 IE 中做到这一点 我真的试图找到一种方法来选择多个 Chrome 和 IE9 中网页中的文本区域 信息位于 http help dottoro com
  • TemplateResolver.set Order user 在 thymeleaf 中的作用是什么?

    我使用 Thymeleaf 作为我的电子邮件模板 并且通过谷歌搜索并能够使用以下配置成功运行代码 Configuration public class TemplateEngineConfig Autowired private MailC
  • 不使用“.Copy”+“.Paste”粘贴格式

    例如 rngTo Value rngFrom Value2 Works rngTo NumberFormat rngFrom NumberFormat Works rngTo Cells Interior ColorIndex rngFro
  • 为什么向字符串添加 null 是合法的?

    MSDN 文章关于字符串基础知识 http msdn microsoft com en us library ms228362 aspx显示这个 string str hello string nullStr null string emp
  • Laravel Eloquent 与 keyBy 建立关系

    我有一个Product模型与一个hasMany关系 public function pricing return this gt hasMany App ProductPrice prod id id 然后我得到了关系 Product wi
  • 如何在 Ionic 6/Capacitor 中使用不同的 admob 方法?

    我有一个离子标签栏组件 我想显示一个 BannerAd 我在我的离子应用程序中使用了以下库 https github com capacitor community admob https github com capacitor comm
  • 如何使用 matplotlib 一起绘制训练和测试图

    我正在尝试将 y train y test 然后 y train pred y test pred 一起绘制在一张图中 我使用以下代码来执行此操作 plot plt plot y test plt plot y pred plt plot
  • Google VR 视频无法加载

    我正在使用谷歌网页版 VR 视图 https developers google com vr concepts vrview web加载 360 度视频 但是当我加载视频时 它说错误 渲染 视频加载错误 对象事件 这是控制台显示的内容 当
  • 动画受面板限制

    有点难以描述 但我会尽力 我有一个带有图像和标签的控件 它需要有 2 个状态 大 和 小 在 大 状态下 图像应位于控件顶部中心 标签应位于下方中心 就像带有图像和标签停靠在顶部的停靠栏一样 在 小 状态下 图像应该较小并且位于控件的左上角
  • 无法在 std::variant 中采用相同类型

    我正在使用 c 17 并且想编写这样的代码 include
  • Magento 1.7.0.0 上的 SOAP V2 url 是什么

    1 7 0 0 版本中访问 Magento SOAP V2 的 url 是否已更改 当我尝试访问 上的服务 时http www somedomain com api v2 soap wsdl 1 http www somedomain co
  • 从 Web 服务下载文件 - 在 ASP.NET 站点中

    我想使用网络服务将文件从网站推送到浏览器 我当前正在将文件读入 base64 字节数组 并从 Web 服务返回该文件 这个网络服务是从网站调用的 我一直在思考如何将其作为原始文件推送到浏览器 理想情况下 我想将字节数组读入内存流 然后如果可
  • 当超过两次下载正在进行时 HttpSendRequest 阻塞

    在我们的程序中 每次需要发出HTTP请求时都会创建一个新线程 并且可以有多个线程同时运行 我遇到的问题是 如果我已经有两个线程正在运行 它们在读取时循环InternetReadFile 打电话后HttpSendRequest 任何后续尝试调
  • pandas.to_json 以特定形式输出日期格式

    数据框中日期的原始形式是 Date 2018 09 17 12 83 12 92 12 38 12 65 12 65 1937329 0 2018 09 10 12 92 13 12 12 81 12 83 12 83 1150470 0
  • C++ boost enable_if问题

    我有什么办法可以简化以下陈述吗 可能 使用boost enable if 我有一个简单的类结构 Base基类 Derived1 Derived2继承自Base 我有以下代码 template