首页 > 编程语言 >C++ 模板类类型限定

C++ 模板类类型限定

时间:2024-09-08 20:15:01浏览次数:8  
标签:MyPet 限定 C++ public say sayWhat type class 模板


#include <iostream>
#include <type_traits>
using namespace std;
namespace
{
    class IAnimal
    {
    public:
        virtual void say() = 0;
    };

    class Dog : IAnimal
    {
    public:
        void say() override
        {
            cout << "我是 狗!!" << '\n';
        }
    };

    class Cat : IAnimal
    {
    public:
        void say() override
        {
            cout << "我是 猫!!" << '\n';
        }
    };

    class Horse
    {
    public:
        void say()
        {
            cout << "我是 马!!" << '\n';
        }
    };
}

template <typename T,
    typename = typename std::enable_if<std::is_base_of<IAnimal, T>::value>::type>
    class MyPet
{
public:
    void sayWhat()
    {
        m_pet.say();
    }
private:
    T m_pet;
};

int main()
{
    MyPet<Dog> myDog;
    myDog.sayWhat();

    MyPet<Cat> myCat;
    myCat.sayWhat();
    
    // 放开注释 typename = typename std::enable_if ... ::type> type 会找不到而报错
   /* MyPet<Horse> myHorse;
    myHorse.sayWhat();*/

    system("pause");
    return EXIT_SUCCESS;
}

输出:

我是 狗!!
我是 猫!!
template <typename T,
    typename = typename std::enable_if<std::is_base_of<IAnimal, T>::value>::type>
    class MyPet
{
}

is_base_of 为 true 会展开成:

template <typename T,
    typename = void
    class MyPet
{
}

is_base_of 为 false 时会找不到 Type 而报错。




参考:https://blog.csdn.net/m0_60259364/article/details/129965365

标签:MyPet,限定,C++,public,say,sayWhat,type,class,模板
From: https://www.cnblogs.com/huvjie/p/18403354

相关文章

  • C++中深拷贝与浅拷贝
    描述:在未定义显示拷贝构造函数的情况下,系统调用默认的拷贝函数——即浅拷贝,它能够完成成员的简单赋值拷贝操作。当数据成员中没有指针时,浅拷贝是可行的;但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,执行两......
  • 南沙信C++陈老师解一本通题:1310:【例2.2】车厢重组
    ​【题目描述】在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列......
  • C++字符串中的string类操作
    愿我如星君如月,夜夜流光相皎洁。                           ——《车逍遥篇》【宋】范成大目录正文:主要特点:基本操作: 代码演示:总结:今天我们接着上次的章节继续,这次我们来说一个为解决上个方法的缺陷而诞生......
  • ae软件_ae软件下载_完整版下载-AE模板 - AE2020软件包下载
    ae软件_ae软件下载_完整版下载-AE模板 - AE2020软件包下载...AE软件:从下载到精通的完全指南AdobeAfterEffects(简称AE)是一款功能强大的动态图形和视觉效果软件,广泛应用于电影、电视、广告等领域。无论你是初学者还是专业人士,掌握AE都能为你的创意作品增添无限可能。本文将为你详......
  • 大二上 C++高级程序设计笔记(1) 栈和c++对c的补充 20240908
    Q1:什么是static类的储存变量?A1:在C++中,static关键字可以用于类成员变量和成员函数,以改变其作用域和生命周期。当static用于类的成员变量时,它具有以下特性:全局唯一性:静态成员变量不属于任何特定的对象实例,而是属于类本身。这意味着无论创建多少个类的对象,静态成员变量都只有......
  • 【C++ Primer Plus习题】12.6
    1大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"queue.h"using......
  • 【C++ Primer Plus习题】12.5
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"queue.h......
  • 【C++11及其特性】智能指针——shared_ptr
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←shared_ptr目录一.共享性智能指针二.shared_ptr的共享原理三.shared_ptr的构造函数1.普通的2.数组的3.带删除器......
  • 【C++】智能指针
    目录1.智能指针简介2. std::unique_ptr2.1.特点2.2.使用示例3. std::shared_ptr3.1.特点3.2.使用示例4. std::weak_ptr4.1.特点4.2.使用示例5.使用智能指针的注意事项5.1.选择合适的智能指针类型5.2.避免循环引用5.3.谨慎使用自定义删除器5.4.注......
  • Linux 下 C/C++ 程序编译的过程
    目录一、GCC工具链二、编译过程1、预处理2、编译3、汇编4、链接本文将介绍如何将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程,包括四个步骤:预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking)。在此之前,首先来看一下GCC工具链。......