自从海湾合作委员会抓住我这个问题已经有一段时间了,但它刚刚发生在今天.但是我从来没有理解为什么GCC在模板中需要typedef typename,而VS和我猜ICC没有.typedef typename是一个"bug"还是一个严格的标准,还是留给编译器编写者的东西?
对于那些不知道我的意思的人来说,这是一个样本:
template<typename KEY, typename VALUE>
bool find(const std::map<KEY,VALUE>& container, const KEY& key)
{
std::map<KEY,VALUE>::const_iterator iter = container.find(key);
return iter!=container.end();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在VS(可能在ICC中)编译,但在GCC中失败,因为它想要这样:
template<typename KEY, typename VALUE>
bool find(const std::map<KEY,VALUE>& container, const KEY& key)
{
typedef typename std::map<KEY,VALUE>::const_iterator iterator; //typedef typename
iterator iter = container.find(key);
return iter!=container.end();
}
Run Code Online (Sandbox Code Playgroud)
注意:这不是我正在使用的实际功能,而只是一些愚蠢的东西来证明这个问题.
我在c ++中有一个从python调用的方法,需要返回一个python列表对象.
我已经创建了这个方法,它附加到一个公开的类,现在可以从python中调用...(它返回void).
所以问题是,如何从这里创建一个python列表:
std::vector<std::string> results;
我真的不明白构造函数如何从这个文档中工作:
http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/list.html
另外......我真的不想返回那种包装的矢量......我只是想用矢量中的字符串值创建一个新的python列表.
我很抱歉,如果这是重复...我找到了很多矢量问题的列表,但我找不到任何关于创建一个新的python列表.
我可以扩展这个问题,以包括一些其他问题,如:
从a创建一个新的python字典std::map<std::string, std::string>,依此类推.