如何创建一个仅在其类型具有特定成员函数时才编译的类? [复制]

2023-12-31

我有一个名为has_f我希望它只接受具有以下内容的模板参数f成员函数。我该怎么做呢?这是我尝试过的:

template <typename T, typename = void>
struct has_f : std::false_type {};

template <typename T>
struct has_f<
    T,
     typename = typename std::enable_if<
        typename T::f
    >::type
> : std::true_type {};

但我遇到了一些神秘的错误。这是我想使用的类:

struct A
{
    void f();
};

我该如何正确地做到这一点?谢谢。


从你的问题的标题来看,我认为你并不真正需要从 true_type 或 false_type 派生的类型 - 只是为了在方法 f 不存在时防止编译。如果是这种情况,并且您还需要该方法的特定签名(至少在参数方面),则在 C++11 中您可以执行以下操作:

template <typename T>
struct compile_if_has_f
{
    static const size_t dummy = sizeof(
        std::add_pointer< decltype(((T*)nullptr)->f()) >::type );
};

这是针对 f() 不应接受任何参数的情况。仅当 f 返回 void 时才需要 std::add_pointer,因为 sizeof(void) 是非法的。

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

如何创建一个仅在其类型具有特定成员函数时才编译的类? [复制] 的相关文章

随机推荐

  • git中p4merge合并工具出错

    我已经为 p4merge 设置了类路径并设置了文件 gitconfig 但是当 p4merge 工具假设要打开这两个冲突的文件时 我收到此错误 有人知道解决方案吗 添加到类路径 C Program Files Perforce p4merg
  • Delphi 中的类/静态常量

    在 Delphi 中 我希望能够创建一个与类关联的私有对象 并从该类的所有实例访问它 在Java中 我会使用 public class MyObject private static final MySharedObject myShare
  • 在 xaml 窗口和用户控件 WPF 之间传递参数

    如何将参数从 xaml 窗口传递到 WPF 用户控件构造函数 我尝试过创建依赖属性 但失败了 我应该尝试 xaml 扩展还是有其他方法可以做到这一点
  • 使用opencv检测肤色

    如何检测皮肤的颜色使用OpenCV 使用 OpenCV 怎么样 哈尔人脸检测器找到一个面部区域 然后得到平均或最常见的颜色在那个脸部区域 既然应该是肤色 Update 环境 我的镜框将具有面部特征 仅限从头发到肩膀 如附件所示 你真的不需要
  • 片段选项卡和片段活动

    我按照指南使用 Fragments 创建了一个应用程序 以便我可以在更大的屏幕上显示更详细的视图 不过 我也想使用选项卡进行导航 根据指南 选项卡也应该是片段 而不是已弃用的 TabHost 一些谷歌搜索表明你不能 不应该嵌套片段 我的问题
  • 在 Java 中解析日期格式

    我正在尝试用 Java 将日期转换为 Unix 时间戳 我的日期示例为 Fri Jun 05 15 53 07 PDT 2009 我的代码是 DateFormat dateFormat new SimpleDateFormat EEE MM
  • 忽略 R 字符串中的转义字符(反斜杠)

    在 SPSS 中运行 R 插件时 我收到一个 Windows 路径字符串作为输入 例如 C Users mhermans somefile csv 我想在后续的 R 代码中使用该路径 但是需要用正斜杠替换斜杠 否则 R 将其解释为转义符 例
  • 如何在 R 中为 tableGrob 自定义特定列?

    我正在寻找自定义 tableGrob 中的特定列 对于这个可重现的示例 我选择查看自定义理由 假设您有以下数据框 df lt data frame Order c 1 3 Name c Adam Ben Charlie Score c 4
  • 为 R 中具有相同符号的连续数字的每个范围分配一个值

    我正在尝试创建一个数据框 其中存在一列 该列保存表示正数和负数的运行长度的值 如下所示 Time V Length 0 5 2 1 5 1 0 1 1 5 1 5 0 0 0 2 0 2 1 0 2 5 0 0 0 3 0 1 1 75 3
  • PHP exec() 未在输出中返回错误消息

    我正在尝试以 XML 格式获取 svn 命令的某些输出 当我输入有效参数时输出正常 但是 当我输入错误的密码时 输出不会显示错误消息 这是 PHP 代码 exec usr bin svn username something passwor
  • Laravel 4 分页计数

    我在我的特定视图 站点中设置了分页 并且它有效 问题是我有一个 php 计数器 foreach players as player tr td count td 每当我切换页面时 它都会从 1 开始 我怎样才能改变这一点 为了实现这一点 您
  • Selenium 不使用 InternetExplorerDriver 单击按钮的解决方法

    我在网页上有一个按钮 当我通过 IE 运行时 Webdriver 不会单击该按钮 我已经尝试了以下解决方法 但没有成功 通过 JavaScript 点击 JavascriptExecutor driver executeScript arg
  • 在 C 中使用 strncpy 更有效地复制 n 个字符

    我想知道是否有一种更干净 更有效的方法来执行以下操作strncpy考虑到max字符数 我觉得自己做得太过分了 int main void char string hello world foo int max 5 char str mall
  • 从类访问 LocationManager/ LocationListener

    我有点迷失在这里 在我的主要活动中 我注册了一个 LocationManager 并将其连接到 LocationListener 以使用 myLocation getLatitude 等 现在我需要使用另一个类中的 Location 方法
  • 数据注释或应用程序验证块

    DataAnnotations 和应用程序验证块有什么区别 DataAnnotations 是一个基于属性的模型 用于 注释 数据 它位于 NET 框架本身中 它最明显的用途是验证 例如 ASP NET MVC 所做的那样 Validati
  • biglm 和 lm 之间的 AIC 不同

    我一直在尝试使用 biglm 在大型数据集 大约 60 000 000 行 上运行线性回归 我想用AIC来进行模型选择 然而 当我在较小的数据集上使用 biglm 时 我发现 biglm 返回的 AIC 变量与 lm 返回的变量不同 这甚至
  • 如何确定隐藏/溢出文本是在元素的顶部还是底部

    我想扩展 Shog9 的答案 如何从javascript判断html元素是否有溢出内容 https stackoverflow com questions 143815 how to determine from javascript if
  • SQL 查询忽略相邻的匹配行

    我有一个活动表 其中包含各种活动和哈希值 actorEntity subjectEntity activity type 在某些情况下 用户可能会在几秒钟内执行完全相同的活动两次 这意味着数据库中会有两个相邻的行具有完全相同的数据 对于某些
  • Objective-C 中的“isa”变量是否等于 Java 中的“instanceof”

    简单的问题 Objective C 中的 isa 实例变量提供与 Java 中的 instanceof 运算符相同的功能是否公平 这些是不同的概念 一个是一个member一个结构体 而另一个是一个operator 模仿严格的解释instan
  • 如何创建一个仅在其类型具有特定成员函数时才编译的类? [复制]

    这个问题在这里已经有答案了 我有一个名为has f我希望它只接受具有以下内容的模板参数f成员函数 我该怎么做呢 这是我尝试过的 template