C++ 继承模板类(参数是子类)替代虚函数。模板类只能访问子类公共成员,受保护的不行
派生类能访问基类的 protected 成员,但是反过来不可以。不要想着用什么简单的方法来代替虚函数。
■网友
这是CRTP (curiously recurring template pattern,https://en.m.wikipedia.org/wiki/Curiously_recurring_template_pattern)。通过把建立虚函数表vtable的过程搬到编译时间来提高效率。对于多次重复调用的函数,性能提高还是很客观的。很多优秀的模版库都在用这个pattern,比如Eigen library.父类access子类的protected或者private 函数问题,我用的是最普遍的解决方式:加上 friend。当然如果多层继承,每一个子类都要加调用他的父类为friend,这很麻烦,但鉴于子类最好将实现设为private,也只能这样了。还有另外的方法比如设一个中间非模版accessor类,通过它来传递friendship。对我个人而言,不是很喜欢。这篇文章里:https://accu.org/index.php/journals/296 把我以上说的都讲的很清楚,值得一看。文章里还有一个偏方,是用函数指针,不用任何friend。娱乐一下就好了,我觉得实际上不适用。第一,子类必须是protected不能是private;第二,成员函数指针编译器优化不好。
推荐阅读
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 有没有比较好的商业计划书模板
- 迈克尔·杰克逊|迈克尔·杰克逊22岁女儿秀肚皮,豪放吞云吐雾,继承父亲音乐受欢迎
- AutoLab|凯迪拉克精神继承者?1.5T+169马力+B级车身材+10万块售价
- C、C++、java等编程语言都有哪些坑
- Bootstrap后台管理模板怎样使用
- c++写http服务器不用cgi和apache该用啥
- 看完c++ primer plus 还有必要再买本c++ primer看吗?
- 有人可以把C,C++,Python等编程语言开发出来,而我们却难以精通,这说明了啥问题
