Nếu tất cả các loại trong số boost::variant
của tôi hỗ trợ cùng một phương pháp, có cách nào để gọi nó một cách tổng quát (tức là không gọi riêng cho từng phương thức của static_visitor
)?Phương pháp gọi chung cho các loại tăng thêm :: Biến thể
Tôi đang cố gắng để có được một cái gì đó như thế này để làm việc:
class A
{
void boo() {}
};
class B
{
void boo() {}
};
class C
{
void boo() {}
};
typedef boost::variant<A, B, C> X;
void foo(X& d)
{
x.boo();
}
nhưng nó thất bại trong việc biên dịch nói 'boo' : is not a member of 'boost::variant<T0_,T1,T2>'
.
Hiện tại, tôi có một số lớp học tất cả được kế thừa từ giao diện để phương thức chia sẻ duy nhất của chúng có thể được sử dụng đa hình. Tôi cũng muốn có thể sử dụng các lớp học thông qua một khách truy cập như tất cả các phương pháp khác là duy nhất cho mỗi lớp cụ thể. Tôi đã hy vọng boost::variant
có thể là một lựa chọn tốt hơn để triển khai cơ chế khách truy cập của chính tôi ở đây. Là nó?