更新:仿函数、函数模板、成员模板、模板特化。

This commit is contained in:
youspectrum 2022-09-29 16:47:19 +08:00
parent 5afd86f6d4
commit 359e82b396
10 changed files with 129 additions and 8 deletions

View File

@ -3,4 +3,4 @@ project(MSTL)
set(CMAKE_CXX_STANDARD 14)
add_executable(MSTL main.cpp h/String.h h/List.h h/Singleton.h h/Faction.h h/shared_ptr.h)
add_executable(MSTL main.cpp h/String.h h/List.h h/Singleton.h h/Faction.h h/shared_ptr.h h/function_like_classes.h h/function_template.h h/member_template.h h/specialization.h)

Binary file not shown.

View File

@ -1,7 +1,3 @@
# ninja log v5
0 197 1664367911765168078 CMakeFiles/MSTL.dir/main.cpp.o 134556d569115d52
197 247 1664367911813167618 MSTL 5fce564c316cd3aa
1 201 1664369005344443406 CMakeFiles/MSTL.dir/main.cpp.o 134556d569115d52
201 254 1664369005396441968 MSTL 5fce564c316cd3aa
0 210 1664369061766923384 CMakeFiles/MSTL.dir/main.cpp.o 134556d569115d52
210 264 1664369061818922019 MSTL 5fce564c316cd3aa

View File

@ -1,3 +1,3 @@
Start testing: Sep 28 20:44 CST
Start testing: Sep 29 15:44 CST
----------------------------------------------------------
End testing: Sep 28 20:44 CST
End testing: Sep 29 15:44 CST

16
h/function_like_classes.h Normal file
View File

@ -0,0 +1,16 @@
//
// Created by dongl on 22-9-28.
//
#ifndef MSTL_FUNCTION_LIKE_CLASSES_H
#define MSTL_FUNCTION_LIKE_CLASSES_H
#endif //MSTL_FUNCTION_LIKE_CLASSES_H
/// 仿函数 类 看起来像一个 函数
template<class T>
struct identity{
const T& operator()(const T& x) const {
return x;
}
};

15
h/function_template.h Normal file
View File

@ -0,0 +1,15 @@
//
// Created by dongl on 22-9-29.
//
#ifndef MSTL_TEM_FUNCTION_H
#define MSTL_TEM_FUNCTION_H
#endif //MSTL_TEM_FUNCTION_H
/// 函数模板
template<typename T>
T& min(const T& var1, const T& var2) {
return var1 < var2 ? var2 : var1;
}

22
h/member_template.h Normal file
View File

@ -0,0 +1,22 @@
//
// Created by dongl on 22-9-29.
//
#ifndef MSTL_MEMBER_TEMPLATE_H
#define MSTL_MEMBER_TEMPLATE_H
#endif //MSTL_MEMBER_TEMPLATE_H
/// 成员模板
template<class T1, class T2>
struct pair{
T1 first;
T2 second;
pair() : first(T1()), second(T2()){}
pair(const T1& a, const T2& b) : first(a), second(b) {}
// 成员模板
template<class U1, class U2>
pair(const pair<U1,U2>& p) : first(p.first), second(p.second){}
};

View File

@ -23,4 +23,6 @@ public:
private:
T* px;
long* pn;
};
};

61
h/specialization.h Normal file
View File

@ -0,0 +1,61 @@
//
// Created by dongl on 22-9-29.
//
#include <cstddef>
#ifndef MSTL_SPECIALIZATION_H
#define MSTL_SPECIALIZATION_H
#endif //MSTL_SPECIALIZATION_H
/// 模板特化 specialization
template<class type>
struct hash{
};
template<>
struct hash<char>{
size_t operator() (char x) const {
return x;
}
};
template<>
struct hash<int>{
size_t operator() (int x) const {
return x;
}
};
template<>
struct hash<long>{
size_t operator() (long x) const {
return x;
}
};
/// partial specialization 模板偏特化 局部特化 个数上的偏
template<typename T, typename Alloc>
class m_vector{
};
template<typename Alloc>
class m_vector<bool, Alloc>{
};
/// partial specialization 模板偏特化 局部特化 范围上的偏
template<typename T>
class C{
};
template<typename T>
class C<T*>{
};

View File

@ -3,6 +3,8 @@
#include "h/String.h"
#include "h/Faction.h"
#include "h/shared_ptr.h"
#include "h/function_like_classes.h"
#include "h/specialization.h"
int main() {
List<double> list = *new List<double>;
@ -18,5 +20,12 @@ int main() {
shared_ptr<String> ptr(new String("ptr"));
std::cout << ptr->get_c_str() << std::endl;
String str("fun_str");
// identity<int> ity()(1000);
hash<long>()(1000);
return 0;
}