В следующем коде у меня есть два типа указателей метода. Мне нужна другая процедура, которая принимает параметр любого из этих типов и использует его на основе других значений. Но я не могу найти базовый тип для этих двух типов, чтобы иметь возможность пройти как в процедуру:Есть ли базовый тип для указателей методов?
type
TIntProc: procedure (I: Integer) of object;
TStrProc: procedure (S: string) of object;
....
procedure TForm1.CallbackTest(A: Integer; Callback: procedure of object {What type should I use here?});
var
IntProc: TIntProc;
StrProc: TStrProc;
begin
if A = 1 then begin
IntProc:= TIntProc(Callback);
IntProc(100);
end else begin
StrProc:= TStrProc(Callback);
StrProc('Hello');
end;
end;
procedure TForm1.MyIntProc(I: Integer);
begin
ShowMessage(IntToStr(I));
end;
procedure TForm1.MyStrProc(S: string);
begin
ShowMessage(S);
end;
я должен быть в состоянии написать:
CallbackTest(1, MyIntProc);
, а также:
CallbackTest(2, MyStrProc);
Но, конечно, я получаю ошибки на обоих, потому что procedure of object
, используемый как тип второго параметра, не является базовым типом для procedure (I: Integer) of object
и procedure (S: string) of object
. Есть идеи, как это сделать?
Можете ли вы подробно остановиться на методе тимерования? Я должен использовать указатели методов, и решение перегрузки не соответствует моим требованиям. –
Подход к перегрузке подходит к вопросу. Возможно, ваша настоящая проблема отличается от вопроса. Вы говорите: «Я должен использовать указатели методов». Хорошо. Код в моем ответе использует указатели на методы. Почему вы вынуждены отказаться от безопасности типа?Вы понимаете последствия этого? –
Что касается typecasting, я предположил, что вы знаете, что такое тип. Я связался с документами для приведения типов. Вы знаете, что такое приведение? Я просто пытаюсь понять, на каком уровне это сделать. –