【发布时间】:2019-07-30 14:20:28
【问题描述】:
我有这段代码,它适用于 GCC:
#include <map>
class Foo;
class Bar;
typedef std::map<Foo,Bar> MyMap;
MyMap::iterator i;
class Foo
{
MyMap::iterator some_data;
};
当前设计的代码(这是令人不快的循环,是的,我坚持使用它)要求 map<Foo,Bar>::iterator 可用于 Foo 和 Bar。
之所以有效,是因为 GCC 库实现恰好不需要实例化映射的键类型来实例化迭代器。
这是有保证的吗?在定义映射迭代器类型时,该标准似乎有些放任自流。这段代码的可移植性如何?
【问题讨论】:
-
我将采用最新标准所说的任何内容。
-
@Yakk-AdamNevraumont 你的意思是this 表示我的代码不符合标准吗?
-
typedef std::map<Foo,Bar> MyMap;已经是非法的。 -
@Yakk-AdamNevraumont 为什么?那里没有实例化发生。
标签: c++ templates iterator stdmap c++-standard-library