Tôi nghĩ một trong những lý do là vì tăng :: hold_any sử dụng phương pháp tiếp cận lập trình meta mẫu trong khi tăng :: bất kỳ cách nào sử dụng phương pháp kế thừa.
Bên trong, tăng :: cửa hàng tinh thần :: hold_any "giá trị" bằng cách sử dụng void * và sử dụng đối tượng khác để theo dõi các thông tin kiểu dữ liệu:
>> boost/spirit/home/support/detail/hold_any.hpp
template <typename Char>
class basic_hold_any
{
....
spirit::detail::fxn_ptr_table<Char>* table;
void* object;
...
}
boost :: bất kỳ cửa hàng "giá trị "sử dụng một người giữ, và nó không cần một đối tượng khác để theo dõi các thông tin kiểu dữ liệu. Chủ sở hữu được kế thừa từ trình giữ chỗ và do đó có các hạn chế thừa kế.
>> boost/any.hpp
class any
{
...
placeholder * content;
...
}
class placeholder
template<typename ValueType>
class holder : public placeholder
{
...
ValueType held;
...
}
... sự khác biệt Biến là nhiều hơn nữa về gọi constructor và destructor, nhưng ngay cả đối với đúc, thúc đẩy tinh thần :: :: hold_any nên nhanh hơn.
Nguồn
2012-11-10 12:20:44
Bạn có đọc bài đăng Chồng tràn không được liên kết từ bài viết đó không? – Mat
Bạn đã nghe nói về "thành ngữ tối ưu hóa đối tượng nhỏ" trong ngữ cảnh của các lớp con trỏ giả ngữ ngữ nghĩa giá trị, như chuỗi std? – Yakk