首页 > 编程语言 >c++11 乱模版

c++11 乱模版

时间:2023-12-15 16:25:16浏览次数:39  
标签:11 std const struct 模版 remove value c++ template

std::is_same,std::enable_if,std::is_integral
template<typename T>
bool isZero(T v)
{
    if (std::is_same<T, float>::value)
    {
        return (fabs(v) < FLT_EPSILON);
    }
    else  if (std::is_same<T, double>::value)
    {
        return (fabs(v) < DBL_EPSILON);
    }

    return v == 0;
}

template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type 
Foo1(T t)
{
    qDebug() << "Foo1: float";
    return t;
}

template<typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
Foo1(T t)
{
    qDebug() << "Fool: int";
    return t;
}
template<typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
IsOdd(T i)
{
    return i % 2;
}

template<typename T, typename T1 = typename std::enable_if<std::is_integral<T>::value>::type>
bool IsEven(T i)
{
    return !bool(i % 2);
}
自定义c++模版函数
namespace cpp 
{
    template<class T, class U>
    struct is_same {
        static constexpr bool value = false;
    };

    template<class T>
    struct is_same<T, T> {
        static constexpr bool value = true;
    };
    template<class T, class U>
    constexpr bool is_same_v = is_same<T, U>::value;


    template<class T>
    struct integral_const {
        using type = T;
    };
    template<class T>
    struct remove_reference : integral_const<T> {};

    template<class T>
    struct remove_reference<T&> : integral_const<T> {};

    template<class T>
    using remove_reference_t = typename remove_reference<T>::type;
    template<class T>
    struct remove_const : integral_const<T> {};

    template<class T>
    struct remove_const<const T> : integral_const<T> {};

	template<class T>
	using remove_const_t = typename remove_const<T>::type;
}
工厂模版
template<typename T>
class GFactory
{
public:
    template<typename... Args>
    static T* Create(Args&&... args)
    {
        return new T(std::forward<Args>(args)...);
    }
};

标签:11,std,const,struct,模版,remove,value,c++,template
From: https://www.cnblogs.com/kinglxg/p/17903588.html

相关文章

  • windows C++
    https://en.cppreference.com/w/cpp/string/basic_stringstd::basic_string C++ Stringslibrary std::basic_string Definedinheader <string>  template<   class CharT,   class Traits = std::char_traits<CharT>,   class......
  • Win11无法启动SqlServer服务问题,SqlServer服务启动1067错误
    因为SQLServer当前支持512字节和4KB的扇区存储大小。所以需要将SqlServer安装到支持4KB的磁盘。以管理员权限运行PowerShell,执行fsutilfsinfosectorinfoC:命令查看各磁盘是否支持4kb存储查找以下字段值(单位为字节)PhysicalBytesPerSectorForAtomicityPhysicalBytesPe......
  • C++ Qt开发:DateTime日期时间组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。在Qt中,日期和时间的处理通常使用QDateTime类。......
  • windows c++ socket
    socket用winsocket时,send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,可以设置收发时限:intnNetTimeout=1000;//1秒//发送时限setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char*)&nNetTimeout,sizeof(int));//接收时限setsockopt(socket,SOL_SOCKET,......
  • C++基础 -7- 引用
    ———————引用———————引用就是数据本身不占用空间 ......
  • springcloudalibabada搭建过程中springboot启动卡住起不来 (Started MoonceProviderApp
    如下图一样springcloudAlibaba在创建新模块之后启动新模块没有注册到nacos上,而是直接卡住起不来原因 原因是:引入了错误的web包: 解决办法:引入相应的 spring-boot-starter-web包:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • device descriptor read/64, error -11
    硬件平台:CM48GRAM核心板Hardware:BCM2711Revision:d03141Serial:100000002297c853Model:RaspberryPiComputeModule4Rev1.1系统:树莓派32位OS问题背景:核心板是8GRAM,由于默认的PAGE_OFFSET是3G,所以内核分配的内存+DMA总大......
  • 【2023潇湘夜雨】WIN11_Pro_23H2.22631.2861软件选装纯净版12.14
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22631.2861。2.增加部分优化方案,手工精简部分较多。3.OS版本号为22631.2861。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.15.0.5》网卡版、......
  • #8 2023.12.11
    453.THUPC2023Mputs("kejie");J每个点可能的值是个区间,首先是儿子的极值,如果某个极值有大于一个,就会让极值加一。Hsolve(l,r,c) link([l,mid],[mid+1,r],c) solve(l,mid,c+1) solve(mid+1,r,c+1)这样同一个颜色就只有偶环,D分母不太大,直接枚举就行了。A路径不会......
  • 用C++调用Windows.Media.Ocr接口实现图片的OCR识别
    这个接口最开始是给UWP程序用的。C++里需要用C++/WinRT方式调用。默认参数的识别率也不是很高的样子。只支持Win10+。#include<winrt/Windows.Storage.h>#include<winrt/Windows.Storage.Streams.h>#include<winrt/Windows.Graphics.Imaging.h>#include<winrt/Windows.Me......