- 主题:c++可否引入“内联继承”
类如:
class A;
class B: inline A
C++中泛滥的模板编程,很大一部分原因为了效率,避免使用接口和继承的概念。
同时为了对模板进行约束,又引入type_traits,concept这些机制
我想引入一种新的方式,即“内联继承”
基类A定义 需要的接口,或者说“concept”,
子类B “内联继承”A, 表明B尊重A的行为方式,可以当作A一样使用。
但是为了效率,继承关系只在编译期存在,编译后,A 内联到 B中, A的方法和属性完全展开到B中,这样就避免了继承的开销。
但是在语法层面,继承关系是存在的,可以定义许多语法层面的“概念”和接口,这样就可以减少很多模板的使用。
当然,这个机制怎么处理虚函数、重载、多继承这些细节,需要进一步研究。
但是这种想法是不是有一定的可行性?
--
FROM 223.72.41.*
继承有什么开销?
【 在 finlab 的大作中提到: 】
: 类如:
: class A;
: class B: inline A
: ...................
--
FROM 107.204.171.*
你这就是没有用虚函数的普通继承
【 在 finlab 的大作中提到: 】
: 类如:
: class A;
: class B: inline A
: ...................
--
FROM 124.64.19.*
第一句就错了。模板最初是为了实现generic programming,不是为了效率,更不是为了避免使用接口和继承的概念
昨天看到B.S自己说模板的template<class T>这种语法,不是他想搞的。
--
修改:z16166 FROM 222.130.138.*
FROM 222.130.138.*
你可以跟C#\java的泛型对比。
C++标准库大量使用模板,很多地方根本是不是泛型的需要,而是因为缺乏一个公共基类或者接口。
很多功能,不用模板,用基类或者接口,会更直观、更严谨、更优美。
标准库选择不适用抽象类机制,就是为了避免虚函数的开销,还有避免使用指针。
泛型是必要的,但是标准库滥用了。
【 在 z16166 的大作中提到: 】
: 第一句就错了。模板最初是为了实现generic programming,不是为了效率,更不是为了避免使用接口和继承的概念
: 昨天看到B.S自己说模板的template<class T>这种语法,不是他想搞的。
--
FROM 223.72.41.*
我个人认为,c++使用模板的最大原因,就是为了可移植性。所以写库的多用模板,没有办法。
你看c#,java有推崇模板的么?
【 在 finlab 的大作中提到: 】
: 你可以跟C#\java的泛型对比。
:
: C++标准库大量使用模板,很多地方根本是不是泛型的需要,而是因为缺乏一个公共基类或者接口。
: ...................
--来自微微水木3.5.14
--
FROM 183.193.16.*