Đoạn mã sau (chỉ được xây dựng để chứng minh vấn đề) biên dịch và hoạt động trong Delphi 2010. Trong Delphi 2009, trình biên dịch không thành công với "E2035 Không đủ thông số thực tế".Đúc thủ tục ẩn danh trong Delphi 2009
program Project50;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyProc = reference to procedure(param: integer);
var
a: TProc;
b: TMyProc;
begin
b := procedure (param: integer)
begin
end;
a := TProc(b); // <-- [DCC Error] Project50.dpr(19): E2035 Not enough actual parameters
end.
Tôi đã tìm thấy chỉ một lỗi rất xấu để giải quyết vấn đề (a: TProc tuyệt đối b). Có ai biết về một workaround đẹp hơn cho trình biên dịch này thiếu?
[Trường TProc thực sự được ẩn bên trong một bản ghi có thể lưu trữ nhiều mã 'thực thi' khác nhau - TProcedure, TMethod và TProc. Đúc được sử dụng để lưu trữ proc nặc danh cụ thể vào lĩnh vực này]
Nó hoạt động trong trường hợp thử nghiệm, nhưng không phải trong trường hợp (hơi phức tạp hơn) của tôi. Đã xảy ra sự cố với tính năng tham chiếu giao diện ở đó. Tôi sẽ cố gắng kết hợp một trường hợp kiểm tra chính xác hơn. TProc chỉ là khu vực lưu trữ cho các đặc quyền 'tham chiếu đến thủ tục' khác nhau, đó là lý do tại sao tôi truyền nó. Có lẽ một cái gì đó đẹp hơn có thể được thực hiện với các generics ... – gabr
@gabr: Tôi đã cập nhật bài đăng của mình để đề xuất hack # 3 (nên tăng giao diện truy cập ref) – kludg
Cảm ơn tất cả công việc của bạn nhưng tôi đã tìm thấy một cách thực sự đơn giản giải quyết vấn đề này ... – gabr