Tôi hiểu đa hình phổ quát khác với những gì chúng tôi mong đợi trong C++. C++ là đa hình ad-hoc.
Universal cho biết có thể chỉ có phiên bản của cùng một chữ ký, bất kể số lượng loại.
Tôi nghĩ rằng các câu trả lời khác lướt qua các chi tiết mà tham số và bao gồm là các danh mục phổ quát. Với văn bản gốc, tôi có thể thấy chúng bị lẫn lộn như thế nào. ;)
Với dưới đây:
struct Foo {
virtual void foo();
};
struct Bar {
virtual void bar();
// virtual void foo(); // this would error
};
Parametric sẽ như thế nào:
struct FooBar : public Foo, public Bar {};
Chữ ký chứa trong FooBar
được tĩnh xác định tại thời gian biên dịch.
C++ không trực tiếp hỗ trợ đa hình bao gồm. Chúng sẽ gần hơn với việc tiêm mà bạn có thể tìm thấy trong các ngôn ngữ kịch bản mà các hàm được đặt hàng đầu tiên.
Xin vui lòng không lấy mã này theo nghĩa đen, nó chỉ là để trình diễn.
struct FooBar {};
int main() {
FooBar foob;
foob.foo = Foo::foo;
foob.bar = Bar::bar;
return 0;
}
FooBar
không biết giao diện của nó tại thời gian biên dịch, được tạo động. Tôi đã sử dụng hành vi tương tự trong javascript và Lua, và tôi chắc chắn nhiều người khác có những thứ tương tự.
Nguồn
2011-09-15 14:49:37
Bạn có thể bị can thiệp khi đọc câu trả lời này: http://stackoverflow.com/a/36949734/67634 – Zuu