Bạn thích sử dụng làm công việc gì? Đối tượng vùng chứa hoặc Macro? Bạn có cảm thấy nó đáng giá không?
Cách kinh điển là sử dụng một metafunction như vậy:
template <typename T>
struct my_string_map {
typedef std::map<std::string, T> type;
};
// Invoke:
my_string_map<int>::type my_str_int_map;
này cũng được sử dụng trong STL (allocator::rebind<U>
) và trong nhiều thư viện bao gồm Boost. Chúng tôi sử dụng nó rộng rãi trong một bioinformatical library.
Nó cồng kềnh, nhưng đó là lựa chọn thay thế tốt nhất 99% thời gian. Sử dụng các macro ở đây không đáng giá nhiều nhược điểm.
(EDIT:. Tôi đã sửa đổi mã để phản ánh Boost/ước STL như chỉ ra bởi Daniel trong bình luận của ông)
Nguồn
2008-08-25 14:51:01
GOTW đã xử lý chủ đề này cách đây một thời gian: http://www.gotw.ca/gotw/079.htm –