C++ 模板特化/重载

2024-04-26

首先,我对这个问题的模糊标题感到抱歉。我不知道如何总结它。

我想要实现的目标如下,我希望能够将不同类型的模板非类型参数传递给同一个类模板,从而产生不同的实例化。像这样的事情:

Foo<1>();
Foo<'1'>(); // different types of object

我认为这是不可能的,因此我被迫做这样的事情

template <typename T, T Val>
struct Foo;

template <int Val>
struct Foo<int, Val> 
{};

template <char Val>
struct Foo<char, Val>
{};

//...

Foo<int, 1>();
Foo<char, '1'>();

这样Foo可以基于第一个模板参数进行专门化。然而,这使我试图在元编程框架中实现的迷你语言的语法变得复杂。有什么技术可以让我区分Foo<1> from Foo<'1'>?基本上我想做的是设置一个编译时标志(在枚举中)来指示是否int or char已通过,但没有明确指定。

EDIT答案让我意识到我的问题意味着我实际上需要这些对象的(编译时)实例。我不...

假设标准以某种方式允许我重载类模板,这样Foo<1> and Foo<'1'>是不同的类型,并且包含不同的值flag场地。然后,这些类型本身可以传递给另一个类模板,该模板可以检查它们并用它做有趣的事情,例如:

template <typename FooType>
struct Bar
{
    typedef typename If < FooType::flag, int, char >::Type Type;
};

当您不反对显式传递类型时,这一切都很容易做到,但这似乎是多余的......


您可以使用宏:

#define MAKE_FOO(value) \
    Foo<decltype(value), value>()

实际上,我认为你需要像广泛使用的函数模板之类的东西make_something在编译时。不幸的是,我不知道如何实现它。

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

C++ 模板特化/重载 的相关文章

  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • 浮点等于的意外结果

    问题不在于为什么0 1 0 9不等于1 0 这是关于平等者的不同行为 有人可以解释为什么下面的示例的工作方式不同 float q 0 1f float w 0 9f float summ q w q w 1 0f False summ 1
  • ASP.NET Core 3:如何在自定义库中引用 3.0.0 程序集?

    我看到引用的应用程序Microsoft AspNetCore App框架 又称为 ASP NET Core 3 0 使用程序集中的类型Microsoft AspNetCore Mvc Abstractions Version 3 0 0 0
  • ToLookup 是否强制立即执行序列

    我正在调查可枚举 ToLookup将可枚举序列转换为字典类型数据结构的 API 更多详情可在这找到 https msdn microsoft com en us library system linq enumerable tolookup
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • 如何测试抽象类的受保护抽象方法?

    我一直在研究测试名为的抽象类的最佳方法TabsActionFilter 我保证继承自的类TabsActionFilter将有一个名为GetCustomer 在实践中 这种设计似乎效果很好 我遇到的一些问题是弄清楚如何测试OnActionEx
  • winapi 函数的函数指针 (stdcall/cdecl)

    请有人给我一些为 MS winapi 函数创建函数指针的提示吗 我试图为 DefWindowProc DefWindowProcA DefWindowProcW 创建一个指针 但出现此错误 LRESULT dwp HWND UINT WPA
  • 为什么即将推出的 Ranges 库不支持范围内的容器初始化?

    介绍 随着即将推出的 Ranges 库 用两个迭代器表示范围的需要几乎消失了 例如 代替 if std equal begin foo end foo begin bar end bar we have if std ranges equa
  • 将数据表传递给存储过程

    我有一个用 C 创建的数据表 using DataTable dt new DataTable dt Columns Add MetricId typeof int dt Columns Add Descr typeof string dt
  • DISM.exe 返回代码?

    我有一个程序调用 dism exe 程序 它在后台运行一些命令 现在 我只检查返回代码 0 或其他任何内容 以显示进程失败或成功 我可以用什么来交叉检查返回代码以获得准确的返回错误 DISM 参考了哪些回报 评论中提供的链接DISMAPI
  • C++ 按值而不是按引用将数组发送到函数

    我的 C 有问题 我有一个对数组进行排序的函数 但我不想处理原始数组 我想通过值而不是通过引用将数组发送到函数 请帮我 int bogoSort int tab int n int iloscOperacjiDominujacych 0 c
  • ThemeInfo 属性有什么用?

    每当我创建新的 WPF 应用程序或 WPF 用户控件库时 AssemblyInfo cs文件包含以下属性 assembly ThemeInfo ResourceDictionaryLocation None where theme spec
  • thread_local成员变量构造

    我遇到了 thread local 的一些奇怪行为 不确定我是否做错了什么或者这是一个 GCC 错误 我有以下最小重现场景 include
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 如何只应用一种 clang-format 操作?

    我想用clang 格式调整我的评论 但仅此而已 选项是 AlignTrailingComments bool 但是当我运行以下命令时 clang format 3 6 i style AlignTrailingComments true
  • 文件/文件夹结构的递归搜索

    我正在尝试为返回文件和文件夹列表的 Web 服务构建递归搜索功能 我创建了这两个方法 因此它们充当递归搜索 它首先获取顶级内容 然后将任何文件添加到 fileList 并将任何子文件夹添加到 subFoldersList 我们传入访问级别
  • 虚拟继承 - 跳过构造函数

    我有以下课程 class Socket Socket Socket SOCKET s class Connection public virtual Socket Connection IP ip 这两个类包含一些纯虚函数和一些非虚函数以及
  • C 中的静态和外部内联函数[重复]

    这个问题在这里已经有答案了 我正在尝试详细了解静态函数和外部函数之间的区别 我知道静态内联函数和外部内联函数之间的基本区别 我的理解如有错误请指正 静态内联函数仅对定义它的翻译单元可见 外部内联函数可以在多个翻译单元中访问 最好在头文件中定
  • 警告 C4172:返回局部变量或临时变量的地址[重复]

    这个问题在这里已经有答案了 可能的重复 指向局部变量的指针 https stackoverflow com questions 4570366 pointer to local variable 我在这个网站上阅读了很多关于同一问题的其他主

随机推荐

  • SymPy 中指数到三角函数的转换同时简化 - 一个顽固的表达式

    我一直在努力简化 exp 2 I N 1 2 exp 2 I N 1 2 4 exp 2 I N cos N 2 答案应该是 sin N 2 但输出与输入相同 我努力了 rewrite cos 然后简化 触发 扩展以及几乎所有我可以从帮助资
  • UIWebView中检测并拦截视频播放

    我想拦截 UIWebView 中的点击 然后使用视频的 URL 这怎么可能 我发现了一个有点类似的帖子 它指出了 webView shouldStartLoadWithRequest navigationType 代表 我似乎无法通过该委托
  • Android Eclipse 模拟器上的相机:

    我的笔记本电脑盖子上没有嵌入式摄像头 我将通过外部 USB 摄像头进行连接 模拟器运行时可以识别这个吗 我会实时显示 AVD 皮肤屏幕内的图像吗 在当前版本的模拟器 Ice Cream Sandwich API14 Linux 中 web相
  • 如何更改 MathJax 中数学的填充?

    就像 当我的 div 中有我的数学部分时 它看起来像这样 我将 div 的填充设置为0 那么 有没有办法改变数学填充的值呢 发现于here https stackoverflow com questions 11296415 how to
  • Python递归数据读取

    如果你曾经玩过 我的世界 下面的内容将会更有意义 由于你们中的许多人还没有 我将尽力解释它 我正在尝试编写一个递归函数 它可以找到从 Minecraft 食谱的平面文件中制作任何 Minecraft 物品的步骤 这个实在是让我难住了 平面文
  • [expr.ref]/1 中提到的脚注到底是什么意思?

    expr ref 1 http eel is c draft expr ref 1 A postfix expression followed by a dot or an arrow gt optionally followed by t
  • 执行正文 onload 事件后,在 WinForms WebBrowser 中获取 HTML 正文内容

    我在 WinForms 中有一个 WebBrowser 控件 其 URL 属性设置为外部网页 我还有一个用于 DocumentCompleted 事件的事件处理程序 在这个处理程序中 我试图获取特定元素 但 wb Document Body
  • 主机 LAN 上的 LXC 容器

    我的 LXC 容器通常与专用网络上的伪装桥配合使用 这次我想将容器放在主机的LAN上 但我无法得到任何结果 我在 debian 上使用 LXC 2 0 7 2 deb9u2 我参考了这个文档 LXC SimpleBridge https w
  • 用于停止表单提交的 JavaScript 代码

    停止表单提交的一种方法是从 JavaScript 函数返回 false 单击提交按钮时 将调用验证函数 我有一个表单验证的案例 如果满足该条件 我将调用一个名为的函数回到上一页 function returnToPreviousPage w
  • Google Developers Console:如何注册新应用程序?

    我正在努力追随本教程 https developers google com analytics solutions articles hello analytics api register project适用于 Google 的 Ana
  • npx create-next-app 命令不起作用 ENOENT 错误

    它显示了这个错误 我正在使用 npx 仍然显示使用纱线 当我将它用于反应应用程序时 npx 工作正常 它应该为我提供下一个应用程序启动器 临时修复可能是 npx create next app latest use npm 以便 creat
  • 如何使用 javascript 在 Whatsapp 上共享图像和文本

    你好 到目前为止 我可以使用 javascript 代码在 Whatsapp 上分享我的内容 但仍然无法分享带有文本的图像 有人做过吗 这是我的 JavaScript 代码 document ready function document
  • std::tr1::shared_ptr 是如何实现的?

    我一直在考虑使用共享指针 并且我知道如何自己实现一个 不想这样做 所以我正在尝试std tr1 shared ptr 我有几个问题 引用计数是如何实现的 它使用双向链表吗 顺便说一句 我已经用谷歌搜索过 但找不到任何可靠的东西 使用过程中有
  • 将命令行参数传递给已运行的应用程序实例

    我想将应用程序新实例的命令行参数传递给已经运行的应用程序 如果存在 到目前为止 我已经尝试了以下方法 程序 cs string Arguments Environment GetCommandLineArgs int iCurrentPro
  • 以编程方式将音乐文件访问到我的应用程序中

    如何以编程方式将设备中的音乐文件访问到我的应用程序中 另一种方法可能是使用 MediaStore 内容提供程序来查找您的音乐 http developer android com reference android provider Med
  • 如何查看大 JSON 对象是否包含值?

    我正在使用 PHP 对大量多维事件数组进行 json 编码 所以我得到如下内容 var ents 7 event id 7 nn The Whisky Drifters nn url the whisky drifters venue Th
  • 如何在 flutter 中重用有状态的 widget

    我有一个以下状态完整小部件 我需要通过更改两个变量来重用它id and collectionName 一般来说 我会提取一个小部件 但在这种情况下 我正在修改变量firstName 这不会让我提取小部件 class IndividualSi
  • 向量的循环移位(相当于numpy.roll)

    我有一个向量 a lt c 1 2 3 4 5 我想做一些类似的事情 b lt roll a 2 4 5 1 2 3 R中有类似的函数吗 我一直在谷歌上搜索 但 R Roll 主要给我提供有关西班牙语发音的页面 怎么样使用head and
  • WebStorm 没有本地存储的库

    我一直在开发一个完全可以在 jsfiddle net 上运行的项目 然而 当我尝试在 webStorm 中运行这个项目时 我收到两个错误 first second 之前 我在这里发布我的问题 我在 stackoverflow 上搜索但找不到
  • C++ 模板特化/重载

    首先 我对这个问题的模糊标题感到抱歉 我不知道如何总结它 我想要实现的目标如下 我希望能够将不同类型的模板非类型参数传递给同一个类模板 从而产生不同的实例化 像这样的事情 Foo lt 1 gt Foo lt 1 gt different