C++

C++模板例子

Posted by DEVIN on Thu, Nov 2, 2023
 1#include <vector>
 2#include <type_traits>
 3using namespace std;
 4
 5class AA {};
 6class BB {};
 7
 8
 9class Test {
10public:
11    template <class T, template <class> class Container, std::enable_if_t<std::is_same_v<T, int>> * = nullptr>
12    void f1(Container<T> &ret);
13
14    template<template<class> class Container>
15    void f2(Container<AA> *);
16
17    template<template<class> class Container>
18    void f3(Container<BB> *);
19};
20
21
22template <class T, template <class> class Container, std::enable_if_t<std::is_same_v<T, int>> * = nullptr>
23void Test::f1(Container<T> &ret)
24{
25    cout << __func__ << std::endl;
26    ret.push_back(1);
27//    if constexpr (std::is_same_v<int, T>) {
28//        std::cout << "inst" << std::endl;
29//    }
30}
31
32template <template<class> class Container>
33void Test::f2(Container<AA> *c)
34{
35    std::cout << __func__ << std::endl;
36}
37
38template <template<class> class Container>
39void Test::f3(Container<BB> *c)
40{
41    std::cout << __func__ << std::endl;
42}
43
44struct X {enum { value1 = false, value2 = true };};
45template<class T, std::enable_if_t<T::value2, int> = 0>
46void func() {
47    std::cout << __func__ << std::endl;
48}
49
50
51int main()
52{
53    vector<int> vec(10);
54
55    Test *test = new Test;
56    test->template f1<int, std::vector>(vec);
57    test->template f2<std::vector>(nullptr);
58    test->template f3<std::vector>(nullptr);
59
60    func<X>();
61    return 0;
62}