混合模板函数重载和继承

2023-12-29

打印以下代码:

generic
overload

但我想要的是在这两种情况下都调用重载或专业化,而不是通用的。我并不是想将重载与模板专业化混合在一起,它们在一起是因为没有一个按我的预期工作。有什么模板魔法可以实现这一点吗?

#include <iostream>

class Interface {};
class Impl: public Interface {};

class Bar
{
public:
    template<typename T> void foo(T& t) {
        std::cout << "generic\n";
    }
    void foo(Interface& t) {
        std::cout << "overload\n";
    }
};
template<> void Bar::foo<Interface>(Interface& t) {
    std::cout << "specialization\n";
}

int main() {
    Bar bar;
    Impl impl;
    Interface& interface = impl;
    bar.foo(impl);
    bar.foo(interface);
    return 0;
}

两种使用方式type_traits测试参数是否源自接口。

#include <boost/type_traits.hpp>

class Interface {};
class Impl: public Interface {};

class Bar
{
    template <class T> void foo_impl(T& value, boost::false_type)
    {
        std::cout << "generic\n";
    }
    void foo_impl(Interface& value, boost::true_type)
    {
        std::cout << "Interface\n";
    }
public:
    template<typename T> void foo(T& t) {
        foo_impl(t, boost::is_base_of<Interface, T>());
    }

};

或者,如果满足条件,则禁用模板,仅保留非模板作为候选。

#include <boost/utility/enable_if.hpp>
#include <boost/type_traits.hpp>

class Interface {};
class Impl: public Interface {};

class Bar
{
public:
    template<typename T>
    typename boost::disable_if<boost::is_base_of<Interface, T>, void>::type foo(T& t)
    {
        std::cout << "generic\n";
    }

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

混合模板函数重载和继承 的相关文章

随机推荐

  • 具有引用返回 Get 的 C# 索引器也支持集

    我在这里做错了什么 或者从 C 7 2 开始 不支持通过 ref 返回和允许设置的索引器 Works public ref byte this int index get return ref bytes index 也有效 public
  • 从文件名中删除单词列表

    我试图从某个目录的所有文件中删除特定单词的列表 然后将其替换为任何内容 So 这个很棒的内容 720p BLAH FOO BANG OOO 30 9 2013 mp4 Becomes 这个很棒的内容 30 9 2013 mp4 现在 以下内
  • 为什么 kc_locale 和 UI lang 开关不起作用?

    A test web应用程序链接到 keycloak 重置凭证页面 http localhost 9990 auth realms test login actions reset credentials client id test we
  • 在 Mac OS X 中更改声音(或其他)系统偏好设置

    我希望能够在 Mac OS X 中切换声音输出源 而无需任何 GUI 交互 有一些工具可以控制声音输出 例如声源 http rogueamoeba com freebies and an applescript 打开首选项对话框 http
  • Django AttributeError:“DatabaseOperations”对象没有属性“select”

    我有一个连接到 PostGIS 数据库后端的 GeoDjango 实例 当我查询该数据库中的表时 标题中出现错误 AttributeError DatabaseOperations object has no attribute selec
  • 使用 reCAPTCHA 和 ajax....javascript 加载问题

    我试图在我的其中一个表单中实现 reCAPTCHA 但我使用 ajax 作为提交 更具体地说是 ajax updater 原型 一旦我提交并错误检查我的表单 我尝试加载 reCAPTCHA 小部件 在我更新的 div 元素中 它基本上只是调
  • 递归子集和函数

    我们的教授为我们的课程分享了以下有关递归的 Python 代码 这是 子集和 问题的解决方案 我一遍又一遍地阅读它 并尝试使用在线工具检查它并逐步遵循参数 但我根本不明白 我知道代码检查列表 L 的子集是否有可能使总和为 0 但我不明白该函
  • WPF 无法找到资源

    我有一个资源文件和两个视图 该视图使用资源文件
  • 如何检查自定义android是否已root?

    我们购买了一些定制的 Android 平板电脑 我们将把它们用作信息亭平板电脑 为了使我们的自助服务终端应用程序正常工作 该应用程序需要 root 访问权限 如何检查设备是否已正确 root 如果不是的话我该如何root它 表明设备已获得
  • 使用 Pow on Rails 4 进行遥控撬

    我正忙于 最终 升级到 Rails 4 并且遇到了 Pry remote 的问题 Problem 添加时binding remote pry对于我的代码 它会破坏代码 但是当我无法通过键入进入调试器时pry remote 这曾经在运行 Ra
  • 如何检查多维数组是否为空?

    基本上 我有一个多维数组 我需要检查它是否为空 我目前有一个if声明尝试这样做 if empty csv array My code goes here if the array is not empty 虽然 那if statement无
  • 在Android上解密“SunJCE”AES加密数据

    我们需要编写一些 Android 代码来解密从我们的服务器发送的一些数据 我们的服务器团队为我们提供了一些使用 SunJCE 提供程序的示例解密代码 遗憾的是 Android 上不存在该提供程序 Cipher cipher Cipher g
  • mingw C++ 无法编译 j0 函数

    我正在尝试使用 MingW msys2 在 Windows 上编译程序 但由于 j0 函数而失败 在Linux上编译没有问题 当我在编译器上使用 std c 11 标志时 它似乎很讨厌 如何正确编译并打开 std c 11 标志 示例代码
  • jar 内的文件对于 spring 不可见

    All 我创建了一个 jar 文件 其中包含以下 MANIFEST MF Manifest Version 1 0 Ant Version Apache Ant 1 8 3 Created By 1 6 0 25 b06 Sun Micro
  • 基于傅里叶变换创建 iPhone 音乐可视化工具

    我正在为 iPhone 设计一个音乐可视化应用程序 我想通过 iPhone 的麦克风采集数据 对其运行傅里叶变换 然后创建可视化来实现这一点 我能得到的最好的例子是奥里奥图奇 http developer apple com library
  • 从 Android 开始:Java 或 Python (SL4A)

    我刚刚订购了一部 Android 智能手机 并想开始尝试创建自己的应用程序 现在的问题是使用哪种语言 是原生 Java 还是使用 SL4A 以前的 ASE 的 Python 我倾向于使用 Python 因为我比 Java 更了解它 但我想知
  • 401 Unauthorized 与 403 Forbidden:当用户未登录时,哪个是正确的状态代码? [复制]

    这个问题在这里已经有答案了 经过大量谷歌搜索和 Stackoverflowing 后 我仍然不清楚 因为许多文章和问题 答案太笼统了 包括403 Forbidden 与 401 Unauthorized HTTP 响应 https stac
  • R ggplot:图例周围的线

    我正在尝试使用 ggplot2 进行数据绘图 出于纯粹肤浅的原因 我想在图例周围画一条线 以便更好地将其与绘图区分开来 即图例框周围的黑色轮廓 我在任何论坛上都找不到这个问题的答案 但也许你有一个提示 library ggplot2 Res
  • $setIsSubset 用于 Mongo 中的常规查询

    我想做相当于 setIsSubset http docs mongodb org manual reference operator aggregation setIsSubset http docs mongodb org manual
  • 混合模板函数重载和继承

    打印以下代码 generic overload 但我想要的是在这两种情况下都调用重载或专业化 而不是通用的 我并不是想将重载与模板专业化混合在一起 它们在一起是因为没有一个按我的预期工作 有什么模板魔法可以实现这一点吗 include