最近换新工作了。工作中需要用到高端的c++11的一些操作,至于我后面又plus一下还是因为可能是c++14或者17中提供的一些操作。反正都是c++11以及之后的一些特性。
首先,今天看一下关于函数模板的问题。我前几天看到这样一段代码。
1 #include <iostream>
2
3 class test
4 {
5 private:
6 public:
7 test(){}
8 ~test(){}
9 void show(int number);
10 };
11
12 void test::show(int number)
13 {
14 std::cout<<__LINE__<<" number="<<number<<std::endl;
15 }
16
17 class work
18 {
19 private:
20 public:
21 work(){}
22 ~work(){}
23
24 //work_it就是例子生成的函数了,模板的参数就是某个类,work_it传入的是这个类的实例的指针和对应的方法
25 template <class T>
26 void work_it(T *object, void(T::*method)(int number))
27 {
28 (*object.*method)(number);
29 }
30 };
31
32 int main()
33 {
34 test objk;
35 work work_;
36 work_.work_it<test>(&objk, &test::show);
37 return 0;
38 }
知识兔其中调用部分也可以采用lamda表达式,最最最需要关注的是*object.*method一定要加括号,在调用时,不然会报错。