Pet*_*ner 1 delphi unicode backwards-compatibility abstract
说我有功能
function GetFieldName(FieldIndex: Integer; FieldName: PChar;
Len: Integer): Integer; virtual; abstract;
Run Code Online (Sandbox Code Playgroud)
而我正在尝试添加
function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar;
Len: Integer): Integer;
Run Code Online (Sandbox Code Playgroud)
这将临时桥接我的unicode数据库连接.
我想继续调用GetFieldName,使其不是抽象的,并做一些类型转换来调用GetFieldNameA,它将成为第一个GetFieldName的技术抽象版本.(我根本不想改变基类)
有没有办法,比如为外部引用添加'name'关键字,在子类中有一个不同名称的抽象函数?
我想象的最终结果是:
function GetFieldName(FieldIndex: Integer; FieldName: PChar;
Len: Integer): Integer;
function GetFieldNameA(FieldIndex: Integer; FieldName: PAnsiChar;
Len: Integer): Integer name 'GetFieldName Virtual Abstract';
Run Code Online (Sandbox Code Playgroud)
不,你不能做你提出的建议.
相反,覆盖GetFieldName.在呼叫之前将它转换PChar为PAnsiChar(如果需要)GetFieldNameA.后者不必(也不能,实际上)被标记override.它可以是普通的非虚函数.
这个建议的不幸部分是你必须在每个后代课堂上做这件事.另一种方法是将虚拟抽象添加GetFieldNameA到基类,然后更改所有后代以覆盖它而不是GetFieldName.更改GetFieldName要调用的基类GetFieldNameA.但如果你不能改变基类,这是一个非首发.
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |