type
{$IFDEF U1}
TMyType = TTypeFromUnit1;
{$ELSE}
TMyType = TTypeFromUnit2;
{$ENDIF}
function MyFunc: TMyType; inline;
После билда мне показывается подсказка:
[dcc32 Hint] uPrgProcs.pas(725): H2443 Inline function 'MyFunc' has not been expanded because unit 'uUnit1' is not specified in USES list
Выходит, что для того, чтобы функция заинлайнилась в модуле uPrgProcs,
я там должен в uses добавить либо uUnit1, либо uUnit2 либо вслю строку
с условным выбором {$IFDEF U1}uUnit1{$ELSE}uUnit2{$ENDIF};
Но в этом случае весь смысл теряется, т.к. делалось именно для того, чтобы указал uUnit в uses и всё.
Получается, что от инлайна придётся отказаться в этом случае?
только если реализацию куда-то еще выносить
1) в uses можно не под ifdef 2) можно использовать {$ifdef u1}uUnit1{$else}uUnit2{$endif}.MyType —- при этом типы называть внути разных юнитов одинаково.
В uses ifdef, чтобы не тащить обе кодовые базы в exe файл, которые большие
их линкер уберет. сам.
Компилятор умный, то что не используется - не тащится
Алиас сделай TMyType=uUnit1.TMyType
Обсуждают сегодня