笔记
咸鱼男孩
这个作者很懒,什么都没留下…
展开
-
c++ 一个函数同时支持copy和move(不只是传值)
偶然间遇到一个问题,简而言之就是父类需要提供同时支持move和copy的接口,但子类不一定需要得到对象(也可能需要)。这时候如果按一般的值传递,虽然需要得到对象的子类可以做到不发生多余拷贝,但是不需要对象的子类在左值传递时会发生一次多余拷贝(下面代码中的c->set语句)。如果修改父类接口为左值引用或右值引用,将无法让一个接口同时支持move和copy语义。 #include <iostream> #include <variant> struct T { T () =原创 2021-07-31 16:58:00 · 297 阅读 · 0 评论 -
怎么使用和规避模板函数指针的类型指定
模板用的多的人都知道使用模板函数指针时,必须在指定函数指针时就对类型进行指定 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 · 244 阅读 · 0 评论 -
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 · 162 阅读 · 0 评论 -
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 · 369 阅读 · 0 评论 -
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 · 276 阅读 · 0 评论 -
关于静态反射c++的思考和尝试
编写这个东西的起因是一些关于静态反射性c++的思考,不过本质上用处不大,除非你全部的类都用tuple实现。有兴趣的可以当做一种对于c++奇技淫巧的学习,没兴趣也不用看。 main.c #include <iostream> #include <list> #include <vector> #include <numeric> #include...原创 2020-03-21 09:01:06 · 437 阅读 · 0 评论