接口抽象类追加新接口

C++语言 码拜 7年前 (2015-05-11) 529次浏览 0个评论
 

RT,我知道追加新接口有风险,最好派生一个新类来作为实现类的基础类,再增加新的接口。
但是我如果在老类的最后,增加一个新接口实现,前面的接口函数不动,会不会有风险?

而且,抽象类的接口函数如果不用_stdcall,会有什么问题吗?

多谢指教了!

70分
C++ 的抽象类就是接口的实现。
接口仅仅是一个协议。

我觉得你说的接口可能是接口方法。

不要这样去做,使用扩展方式。
重写一个新的接口(或者继承原来的接口),让你的实现同时实现新旧接口(实现新接口)。

如果你添加一个接口方式,那么当使用修改后的接口,尝试获取就得实现就会崩溃。

__stdcall 是最好的,因为接口仅仅是协议,你不能期望呼叫你的服务的语言都支持 C/C++ 的调用约定。

引用 1 楼 Saleayas 的回复:

C++ 的抽象类就是接口的实现。
接口仅仅是一个协议。

我觉得你说的接口可能是接口方法。

不要这样去做,使用扩展方式。
重写一个新的接口(或者继承原来的接口),让你的实现同时实现新旧接口(实现新接口)。

如果你添加一个接口方式,那么当使用修改后的接口,尝试获取就得实现就会崩溃。

__stdcall 是最好的,因为接口仅仅是协议,你不能期望呼叫你的服务的语言都支持 C/C++ 的调用约定。

是的,我指的就是接口方法。
我理解的是,这样修改以后,会在虚函数表最后增加一个函数指针,而不会影响表前面的函数指针,因此旧的调用方式不会崩溃,实际我用旧的调用程序调用,也没有发生崩溃。请问这样的结果是不是表示不会有问题?

对于_stdcall的说明,非常清楚,谢谢!

10分
大部分的编译器的实现都是按照声明顺序填充虚函数表,所以你所说的这种做法是向前兼容的~
10分
你在接口抽象类里面添加一个纯虚函数接口,然后在派生的子类里面去实现这个接口,没有问题阿
10分
如果客户端使用的旧的接口,就肯定是没有问题,你添加一个接口方法在这种情况下,就和创建一个新接口,并继承就得接口是一致的。

而唯一的问题是,假如你的客户端拿到的接口是新的,但是,服务器提供的就接口,就有问题了。

引用 5 楼 Saleayas 的回复:

如果客户端使用的旧的接口,就肯定是没有问题,你添加一个接口方法在这种情况下,就和创建一个新接口,并继承就得接口是一致的。

而唯一的问题是,假如你的客户端拿到的接口是新的,但是,服务器提供的就接口,就有问题了。

非常感谢你的答疑!

多谢各位朋友指点!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明接口抽象类追加新接口
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!