首页 > 编程语言 >C++模板例子

C++模板例子

时间:2024-01-20 17:33:09浏览次数:32  
标签:std Container void C++ 例子 template Test class 模板

title: "C++模板例子"
date: 2023-11-02T01:05:25+08:00
tags: ["C++"]
categories: []
draft: false
toc: true
#include <vector>
#include <type_traits>
using namespace std;

class AA {};
class BB {};


class Test {
public:
    template <class T, template <class> class Container, std::enable_if_t<std::is_same_v<T, int>> * = nullptr>
    void f1(Container<T> &ret);

    template<template<class> class Container>
    void f2(Container<AA> *);

    template<template<class> class Container>
    void f3(Container<BB> *);
};


template <class T, template <class> class Container, std::enable_if_t<std::is_same_v<T, int>> * = nullptr>
void Test::f1(Container<T> &ret)
{
    cout << __func__ << std::endl;
    ret.push_back(1);
//    if constexpr (std::is_same_v<int, T>) {
//        std::cout << "inst" << std::endl;
//    }
}

template <template<class> class Container>
void Test::f2(Container<AA> *c)
{
    std::cout << __func__ << std::endl;
}

template <template<class> class Container>
void Test::f3(Container<BB> *c)
{
    std::cout << __func__ << std::endl;
}

struct X {enum { value1 = false, value2 = true };};
template<class T, std::enable_if_t<T::value2, int> = 0>
void func() {
    std::cout << __func__ << std::endl;
}


int main()
{
    vector<int> vec(10);

    Test *test = new Test;
    test->template f1<int, std::vector>(vec);
    test->template f2<std::vector>(nullptr);
    test->template f3<std::vector>(nullptr);

    func<X>();
    return 0;
}

标签:std,Container,void,C++,例子,template,Test,class,模板
From: https://www.cnblogs.com/devin1024/p/17976806

相关文章

  • 【C++入门到精通】 C++入门—命名空间
    前言    前面我们学习了C语言,并且知道了C语言的基础语法与用途。接下来一段时间我们会再来学习一下基于C语言并且根据C语言改造的一门新的语言—C++     硕硕相信只要各位大佬们跟着我的博客看下去,肯定能有不少的收获。二话不说咱们要开车了,坐稳扶好呦C++的发展历......
  • C++常见面试题整理
    1.CPP编译链接过程1.CPP编译链接过程预处理处理以#开头的命令,纯文本替换,类型不安全#pragmalib和#pragmalink除外,#pragmalib用于指定要链接的库,#pragmalink用于指定程序入口(默认入口是main函数,但可以通过该命令修改)都是在链接阶段进行处理编译词法分析,语法分析,......
  • 算法模板 v1.3.1.20240120
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • C++11原子变量:线程安全、无锁操作的实例解析
     在C++11中,原子变量(std::atomic)提供了一种线程安全的方式来操作共享变量。下面是一个简单的例子,演示了C++11原子变量的用法。#include<iostream>#include<atomic>#include<thread>std::atomic<int>counter(0);//声明一个原子整数变量voidincrementCounter(int......
  • C++ opencv计算两个cv::Rect的重复面积
    C++ opencv计算两个cv::Rect的重复面积  #include<opencv2/opencv.hpp>#include<iostream>intmain(){//创建两个矩形cv::Rectrect1(10,10,50,50);//(x,y,width,height)cv::Rectrect2(30,30,50,50);//检查两个矩形是否重叠......
  • c++函数默认参数及占位参数
    一.函数默认参数在c++中,函数形参列表中的形参是可以有默认值的语法:如果我们自己传入数据,就用自己的数据,如果没有,就用默认值注意:1.如果某个位置参数有默认值,那么从这个位置往后,从左往右,必须都要有默认值2.如果函数声明有默认值,函数实现的时候就不能有默认参数。(声明和实现只......
  • c++引用
    一.引用的基本使用作用:给变量起别名语法:数据类型&别名=原名二.引用注意事项引用必须初始化引用在初始化后,不可以改变三.引用做函数参数作用:函数传参时,可以利用引用技术让形参修饰实参优点:可以简化指针修饰实参四.引用做函数返回值注意:1.不要返回局部变量的引用......
  • 浅谈C++简单前缀和实现
    浅谈前缀和2023.9.28\(tips:\)文章持续更新中,欢迎关注\(upd:\)文章从洛谷博客迁移至博客园(\(2024.1.19\))洛谷B3612【深进1.例1】求区间和题目大E:有一个内部元素个数为\(n\)的数组\(a\),现在有m次询问,求a[l]到a[r]之间所有元素的和朴素的做法:#include<iostream>usin......
  • C++-类和对象(1)
    引言:C++语言兼容C语言的基础上,更多的是面向对象进行编程,即相较于事务处理的流程,更侧重于处理过程中涉及到的类以及对象。今天向大家分享C++中的类与对象相关知识。1.类的定义:常使用class关键字定义一个类:由两部分构成,分别是成员属性和成员函数。classclassName//类名{//成员......
  • Avalonia TemplatedControl (模板控件)
    在ava中的模板控件相当于wpf中的自定义控件在下面示例中,将绘制一个文本框和一个按钮,用来组合一个搜索控件在app.axaml中加入样式<Application.Styles><FluentTheme/><StyleIncludeSource="/TemplatedControl1.axaml"/></Application.Styles>引入并使用xmlns......