Tôi đã sử dụng C++. Tôi đã kết thúc với một cái gì đó hoạt động, nhưng là một rạp xiếc vĩ mô: https://github.com/wkaras/c-plus-plus-misc/tree/master/IFACE. Giao diện là hai con trỏ, một con trỏ để đối tượng thành viên dữ liệu và một con trỏ tương đương với một bảng ảo (một cấu trúc con trỏ tới các hàm thunk gọi các hàm thành viên). Các bảng này (không may) được tạo vào thời gian chạy. Chuyển đổi từ giao diện sang giao diện con yêu cầu unordered_map tra cứu, vì vậy nó là O (1) độ phức tạp về thời gian trung bình. So với việc chuyển đổi một lớp con trỏ có nguồn gốc/tham chiếu đến một thành một lớp cơ sở, đó là O (1) trường hợp xấu nhất.
Nó không phải là rất có thể sử dụng, nhưng nó cho thấy rằng giao diện có thể được (sạch) thêm vào C + + với nỗ lực tương đối ít. Có những trường hợp giao diện tốt hơn OO dựa trên thừa kế, và con bò cũng ra khỏi chuồng càng xa càng cố gắng giữ cho C++ nhỏ.
Trong một số ý nghĩa, đó là những gì mẫu làm. Nếu bạn gọi một hàm với các đối số templatized, bạn có thể truyền vào bất kỳ đối tượng nào đáp ứng các yêu cầu như được định nghĩa bằng cách bạn sử dụng mẫu. – Bill