是否可以创建一个特征来回答类型是否来自 std?

2023-11-27

After 这个问题通过利用 ADL,我们可以创建一个特征来回答传递的类型是否来自我们的命名空间:

#include <utility>

namespace helper
{
  template <typename T, typename = void>
  struct is_member_of_sample : std::false_type
  {
  };

  template <typename T>
  struct is_member_of_sample<
      T,
      decltype(adl_is_member_of_sample(std::declval<T>()))> : std::true_type
  {
  };
}

namespace sample
{
  template <typename T>
  auto adl_is_member_of_sample(T && ) -> void;
}

// -- Test it

namespace sample
{
  struct X;
}

struct Y;

static_assert(helper::is_member_of_sample<sample::X>::value, "");
static_assert(not helper::is_member_of_sample<Y>::value, "");

int main(){}

从显而易见的原因来看,这不能应用于std命名空间 - 根本没有办法注入adl_is_member_of_sample相当于std命名空间而不会让我们自己暴露于未定义的行为。

是否有一些解决方法可以创建该特征?


这似乎有效:

#include <functional>
#include <type_traits>
#include <utility>
#include <string>

namespace other { struct S{}; }

namespace my {
    template< class Type >
    void ref( Type&& ) {}

    template< class Type >
    auto ref_to( Type&& o )
        -> Type&
    { return o; }

    template< class Type >
    constexpr auto is_std_type()
        -> bool
    {
        using std::is_same;
        using std::declval;
        return not is_same< void, decltype( ref( ref_to( declval<Type>() ) ) )>::value;
    }

    struct Blah {};

    constexpr bool int_is_std       = is_std_type<int>();
    constexpr bool blah_is_std      = is_std_type<Blah>();
    constexpr bool other_is_std     = is_std_type<other::S>();
    constexpr bool string_is_std    = is_std_type<std::string>();
};

#include <iostream>
using namespace std;
auto main()
    -> int
{
    cout << boolalpha;
    cout << "int is std = " << my::int_is_std << "\n";
    cout << "blah is std = " << my::blah_is_std << "\n";
    cout << "other is std = " << my::other_is_std << "\n";
    cout << "string is std = " << my::string_is_std << "\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以创建一个特征来回答类型是否来自 std? 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • Sql SMO:如何获取数据库物理文件名的路径?

    我正在尝试返回数据库的 mdf ldf 文件的物理文件路径 我尝试使用以下代码 Server srv new Server connection Database database new Database srv dbName strin
  • Chrome 渲染颜色的方式与 Safari 和 Firefox 不同

    由于某种原因 Chrome 将 FF3A00 渲染为 FF0000 我包含了来自的屏幕截图jsfiddle来说明这一点 色度计报告的颜色 以及我看到的颜色 与 CSS 所说的颜色不同 其他颜色也会发生这种情况 例如 FFAF00 根据色度计
  • 使用 Assembly.LoadFrom 和 Assembly.Load 混合加载程序集时的奇怪行为

    使用混合加载程序集时的奇怪行为Assembly LoadFrom and Assembly Load 我在加载程序集时遇到了奇怪的行为Assembly LoadFrom稍后与Assembly Load 我正在使用加载程序集Assembly
  • ASP.NET Web API 返回可查询的 DTO?

    我使用 ASP NET Web API 构建了一个不错的小 API 但我想从我的上下文 实体框架 AsQueryable 返回实体是不正确的 因此我将所有内容映射到 DTO 对象 然而我不太明白 如何保持上下文可查询 但仍然只返回 DTO
  • “计算附加信息”是什么意思?

    Eclipse Helios 定期开始运行显示 计算附加信息 的作业 这段时间 Eclipse 非常迟缓 几乎无法使用 这份工作是做什么的 我可以把它关掉吗 我只是希望 JDT 团队中有人能够意识到并摆脱它 让它运行得更快 或者至少将其更改
  • 允许所有远程连接,MySQL

    我一直在使用 SQL Server 现在在一个项目中使用 MySQL 使用 SQL Server 如果我们的开发人员知道主机 用户名和密码 他们就可以连接到本地计算机上的远程数据库 不过 对于 MySQL 为了让开发人员能够从本地计算机进行
  • 在类构造函数中包含参数是否可以接受?

    我正在编写一个 ruby gem 它对于计算文本中单词的出现次数很有用 我选择在类构造函数中放置 3 个参数 代码可以工作 但我想重构它以使其美观 根据您的经验 作为 API 读取 维护 使用一个带有没有参数的构造函数和大量 setter
  • OpenCV:FFMPEG:编解码器不支持标签 0x34363268/'h264'

    像在 Mac OS 10 13 6 上一样安装 opencv 后 conda install c conda forge ffmpeg conda install c conda forge opencv 并使用fourcc cv2 Vid
  • OCaml 类型推断算法如何工作?

    我目前正在学习 OCaml 我很好奇 OCaml 如何进行类型推断 我知道这是通过一个称为统一的过程完成的 我尝试阅读已发表论文中的算法 但符号让我失望 谁能为我描述一下分步过程 实际上 可以说统一是算法的实现细节 类型系统只是一组规则 这
  • 使用 ng-click 在 angularJs 中添加和删除类

    我正在尝试如何使用 ng Click 添加课程 我已经将我的代码上传到plunker中点击这里 查看角度文档 我无法弄清楚应该完成的确切方法 下面是我的代码片段 有人可以引导我走向正确的方向吗 div class block div 控制器
  • 将矩导入 Angular 会出现错误

    我收到以下错误 Module node modules moment moment has no exported member default 当我使用 import as moment from moment import defaul
  • 如何在 SQLAlchemy 中加载 SQLite3 扩展?

    我构建了一个 SQLite 扩展 即 so 库 我想使用 SQLAlchemy 在我的应用程序中使用它 它是一个 Flask 应用程序 但我不认为 Flask 在这里发挥作用 该扩展可以从 CLI 加载并且似乎可以工作 sqlite3 SQ
  • P0522R0如何破码?

    今天我正在阅读 clang 的 C 17 支持页面 我注意到一些奇怪的事情 特点将模板模板参数与兼容的参数相匹配 P0522R0 被标记为部分 因为它必须通过开关激活 他们的笔记says 尽管是缺陷报告的解决方案 但该功能在所有语言版本中默
  • 取消设置字中的最高有效位 (int32) [C]

    如何取消设置一个字的最高有效位 例如 0x00556844 gt 0x00156844 有一个 builtin clz在 gcc 中 但它只计算零 这对我来说是不需要的 另外 我应该如何替换 msvc 或 intel c 编译器的 buil
  • SQL 查询获取结果集最后一行中所有列值的总和以及行总和(分组依据)

    有人可以帮我编写一个查询来获取 TCS 和 TRS 吗 ID Jan Feb Mar TRS 1 4 5 6 15 2 5 5 5 15 3 1 1 1 3 TCS 10 11 12 TCS 总列总和 和TRS 总行总和 分别是新的列和行
  • setTimeout 是使用 javascript 执行异步函数的好解决方案吗?

    在网上搜索有关异步函数的信息 我发现很多文章使用 setTimeout 来完成这项工作 window setTimeout function console log second 0 console log first Output fir
  • 绘制金字塔图

    我需要画一个金字塔图 如所附的 我找到了一个使用 R 但不是 ggplot 的示例here 任何人都可以给我一些使用 ggplot 执行此操作的提示吗 谢谢 我用了一些解决方法 而不是使用 geom bar 而是使用了 geom liner
  • Pandas read_csv 指定 AWS 配置文件

    熊猫 v1 0 5 使用s3fs用于连接 AWS S3 并读取数据的库 默认情况下 s3fs 使用在以下位置找到的凭据 aws credentials文件输入default轮廓 如何指定 pandas 在从 S3 读取 CSV 时应使用哪个
  • SQLAlchemy 重复键更新

    有没有一种优雅的方式来做INSERT ON DUPLICATE KEY UPDATE在 SQLAlchemy 中 我的意思是语法类似于inserter insert execute list of dictionaries ON DUPLI
  • 是否可以创建一个特征来回答类型是否来自 std?

    After 这个问题通过利用 ADL 我们可以创建一个特征来回答传递的类型是否来自我们的命名空间 include