- 博客(219)
- 资源 (4)
- 收藏
- 关注
原创 std::mem_fn和std::mem_fun
std::mem_fn和std::mem_fun(deprecated)Convert member function to function object,即将成员函数转化为函数对象,这样就可以像普通函数那样使用。
2024-05-13 23:36:08 164
原创 模板显式特化与隐式特化
当使用一个模板时,称为实例化模板。模板实例是编译器通过将模板参数应用于模板定义而创建的具体函数或类。模板实例又称为特化。因此,rational是模板rational的一个特化。因此,特化是针对特定一组模板参数实现模板的过程。C++允许为一个特定的模板参数集合定义一个定制的特化;也就是说,可以创建一个规则的例外情况。当你自己定义特化而不是让编译器为你实例化模板时,它被称为显式特化(也称为完全特化)。编译器自动创建的特化将是隐式特化。
2024-05-08 23:04:18 323
原创 (类)偏特化Partial Specialization
当编写一个模板特化,涉及部分但不是全部模板参数时,它被称为偏特化(Partial Specialization)。【注意,偏特化是针对类模板而言,函数模板不可偏特化,只能全特化】
2024-05-08 23:03:39 174
原创 值模板参数Value Template Parameters
模板通常使用类型作为参数,但它们也可以使用值。使用类型和可选名称声明一个值模板参数,方式与声明函数参数类似。值模板参数仅限于可以指定编译时常量的类型是bool、char、int等,但不允许使用浮点类型、字符串字面值和类。
2024-05-08 23:02:48 271
原创 使用模板时模板的定义应该放到头文件
在使用函数模板之前,编译器必须看到不仅仅是一个声明,通常编译器需要完整的函数模板定义。换句话说,如果你在头文件中定义了一个模板,那么这个头文件必须包含该函数模板的主体。
2024-05-06 17:30:05 204
原创 对于模板,编译器不会执行任何自动类型转换
作为一个模板,编译器不会执行任何自动类型转换。编译器无法知道你想要模板参数具有第一个函数参数的类型,或第二个函数参数的类型,或者有时是第一个,有时是第二个。相反,编译器要求你明确地写出你的意思。在这种情况下,你可以通过将所需的类型放在尖括号中告诉编译器要使用哪种类型作为模板参数。
2024-05-06 16:47:07 199
原创 不能盲目地将std::vector的push_back替换为emplace_back
使用push_back还是emplace_back的建议:如果push_back的对象是已经存在的,则不建议盲目将push_back替换为emplace_back。因为emplace_back可能会引起不必要的二进制膨胀。如果对象是新创建的,则可以考虑将push_back(Obj(构造参数))改为emplace_back(Obj(构造参数))。
2024-05-05 16:12:49 125
原创 std::sort并不支持所有的容器
std::sort并不支持所有的容器,无法对std::list使用std::sort(),但可以使用std::list的方法sort()。
2024-05-04 22:12:11 161
原创 继承体系下的拷贝构造
CRTP(Curiously Recurring Template Pattern) 奇异递归模板模式。使用CRTP的目的是父类在编译时就可以知道子类的信息,将多态调用转为编译期绑定,节省了虚函数调用的开销。不使用CRTP时是虚函数调用,使用CRTP时在编译期利用子类作为模板参数,提早绑定子类,而不是运行时绑定。
2024-05-04 14:33:04 341
原创 泛型算法
std::remove_if函数删除容器中满足`pred`的元素,返回最后一个没被移除的元素后面一个迭代器(An iterator to the element that follows the last element not removed.),但是容器的大小是不变的。假设`std::remove_if`返回的迭代器是`pend`,虽然容器的大小不变,
2024-04-27 19:36:16 246
原创 CMakeLists.txt中如何添加编译选项?
编译器实际使用的编译选项不只是来源于`CMAKE_CXX_FLAGS`,而是来自`CMAKE_CXX_FLAGS`与其它变量(如`CMAKE_CXX_FLAGS_DEBUG`、`CMAKE_CXX_FLAGS_RELEASE`、`CMAKE_CXX_STANDARD `等)的组合。
2024-04-24 12:41:25 1013
原创 std::string_view
而使用std::string_view作为入参可以同时兼容入参是std::string和const char*的情况。可以提供重载的print来避免上述问题,不过会增加代码量。都提供时编译器还是会进行最佳匹配。如下的代码,当只提供入参是。
2024-03-28 22:43:02 237
roLabelImg.exe
2023-05-04
mask-wearing data for yolov8
2023-03-20
CMake关于ctest的示例
2022-05-31
cifar10_multi_gpu_train.py
2020-11-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人