我在理解 boost::my_map_list_of
函数时遇到一些问题。特别是这部分:
operator Map const&() const { return data; }
谁能解释一下它是如何工作的?并且这种方式创建的map是否在编译时进行了初始化?
下面是整个 boost:my_map_list_of() 代码:
template<class K, class V>
struct map_list_of_type {
typedef std::map<K, V> Map;
Map data;
map_list_of_type(K k, V v) { data[k] = v; }
map_list_of_type& operator()(K k, V v) { data[k] = v; return *this; }
operator Map const&() const { return data; }
};
template<class K, class V>
map_list_of_type<K, V> my_map_list_of(K k, V v) {
return map_list_of_type<K, V>(k, v);
}
int main() {
std::map<int, char> example =
my_map_list_of(1, 'a') (2, 'b') (3, 'c');
cout << example << '\n';
}
main()
中的代码正在调用函数 my_map_list_of()
,它返回一个 map_list_of_type
对象:
my_map_list_of(1, 'a')
然后,map_list_of_type::operator()
在返回的对象上调用。该函数返回相同的对象。
my_map_list_of(1, 'a') (2, 'b');
^^^^^^^^
和map_list_of_type::operator()
在新返回的对象上再次调用。
my_map_list_of(1, 'a') (2, 'b') (3, 'c');
^^^^^^^^
然后,map_list_of_type::operator Map const&()
被隐式调用,因为此分配需要它。对象 map_list_of_type<int,char>
转换为 std::map<int,char>
std::map<int, char> example = my_map_list_of(1, 'a') (2, 'b') (3, 'c');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我是一名优秀的程序员,十分优秀!