- 博客(12)
- 收藏
- 关注
原创 c++ 一个函数同时支持copy和move(不只是传值)
偶然间遇到一个问题,简而言之就是父类需要提供同时支持move和copy的接口,但子类不一定需要得到对象(也可能需要)。这时候如果按一般的值传递,虽然需要得到对象的子类可以做到不发生多余拷贝,但是不需要对象的子类在左值传递时会发生一次多余拷贝(下面代码中的c->set语句)。如果修改父类接口为左值引用或右值引用,将无法让一个接口同时支持move和copy语义。#include <iostream>#include <variant>struct T{ T () =
2021-07-31 16:58:00 316
原创 c++如何判断一个表达式是否可在编译期得解
namespace datail{ template<auto t> struct can_compile_time_calculate_check_helper { }; template<typename T, typename = void> struct can_compile_time_calculate_check_imple :std::false_type { }; template&.
2021-07-12 17:02:25 237
原创 c++编译期归并排序
偶然看到了这个题目尝试着自己写了一下,不动手还是觉得挺简单的,一动手思前想后敲了两个半小时。#include <iostream>#include <tuple>template<typename itType, int i = 1>struct Next { using type = typename Next < typename itType::next, i - 1 >::type;};template<typename it
2021-02-09 13:22:19 304 1
原创 怎么使用和规避模板函数指针的类型指定
模板用的多的人都知道使用模板函数指针时,必须在指定函数指针时就对类型进行指定template<typename Type>void aaa (Type&&){}int main (int argc, char* argv[]){ std::function<void (int) > f = aaa<int>;}但指定函数指针的地方不是函数实际发生调用的地方,所以参数的引用类型对于指针的指定处来说是不必要的依赖,而且指定类
2020-09-21 11:42:00 265
原创 std::is_abstruct的一种实现
函数入参无法用抽象类定义template<typename Type, typename = void>struct is_abstract{public: static constexpr bool value = true;};template<typename Type>struct is_abstract<Type, decltype (static_cast<void (*) (Type) > (nullptr), void()
2020-07-08 15:53:17 172
原创 c++ 模板 函数也能偏特化?
template<typename Type, typename ...Placeholder, typename std::enable_if_t<sizeof... (Placeholder) == 0, bool> = false>void aaa (Type, Placeholder...){}template<typename Type, typename std::enable_if_t<std::is_same_v<std::string.
2020-07-07 20:48:42 382
原创 C++模板 获得两个模板是否相同,模板的最小大小,某个实现是否来源于某个模板
只处理存放类型的模板附:对于编译器而言,using 重命名模板和原模板在实例化以前属于两个模板,不能简单使用std::is_same的逻辑来处理两个模板是否相同的问题。#ifndef TEMPLATE_PROCESSING_H#define TEMPLATE_PROCESSING_H#include <cstddef>#include <type_traits>template <typename Type, template <typename ...&
2020-06-21 20:58:55 285
原创 正经的c++面向对象技巧——如何方便的只对特定类暴露特定接口
//目标:在AB获得的对象为同一个的时候,只对A暴露imple的todo接口方法1: 稍显麻烦class Imple;class AReference{ void todo (Imple&);};class BReference{ void todo (Imple&);};class Imple{ //禁止外部获取 ...
2020-04-03 12:44:03 691
原创 从代码出发,思考代码本身,开历史倒车——C/C++宏的奇技淫巧
我想描述的是一个,从c语言的宏出发,通过宏定义和循环包含,将include看做函数调用,对在预编译阶段对将要编译的文本直接进行修改的方式。一种夸张的奇技淫巧,而且不完善,因为include对外部的影响比较有限,只能影响外部的宏而不能直接决定是否启用外部内容,#if的影响不能跨越文件,也没有能跨越文件版本的#if。不知道怎么描述我想表达的事,只能写两段代码。//file_reference...
2020-04-02 23:55:14 175
原创 关于静态反射c++的思考和尝试
编写这个东西的起因是一些关于静态反射性c++的思考,不过本质上用处不大,除非你全部的类都用tuple实现。有兴趣的可以当做一种对于c++奇技淫巧的学习,没兴趣也不用看。main.c#include <iostream>#include <list>#include <vector>#include <numeric>#include...
2020-03-21 09:01:06 450
原创 c++模板类的模板参数类型获取
现在还只是基本,之后有心情会想办法同时获得非类型参数以及顺序template<typename ClassName>struct Template_Type_Traits{};template<template<typename ...Args> class ClassName, typename ...Args>struct Templat...
2020-03-09 03:12:43 3356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人