繁体   English   中英

Eclipse CDT索引和std :: unique_ptr

[英]Eclipse CDT indexing and std::unique_ptr

我在这段代码中使用std :: unique_ptr,它按照我的预期编译和运行。

std::stringstream out;
out << std::setw(3) << std::setfill('0') << i;
std::unique_ptr<std::string> s(new std::string(out.str()));
s->insert(s->end()-2, 1, '.');
return std::move(s);

但是,我从Eclipse CDT收到错误消息。 在第四行:无法解析方法“插入”,无法解析方法“结束”。

以前,我在名称std :: unique_ptr的外观上也遇到了错误。 通过设置预处理器符号__GXX_EXPERIMENTAL_CXX0X__并重建索引来解决问题, 如此问题的答案中所述。

有没有办法让CDT理解s的类型是std :: string *并且它应该在std :: string中查找s-> insert()和s-> end()?

PS:我使用的是Eclipse 3.7.1和CDT 8.0.0.201106081058

PS2:我想在上面的问题中将其作为评论发布,但我不能,大概是因为我是新用户

似乎Eclipse CDT索引器无法推断出unique_ptr :: pointer类型,它也被用作运算符的返回类型 - >()。 当你输入类似的东西时,你可以看到这个

std::unique_ptr<Type *> ptr;
ptr.reset(new Type);

将“检测到”错误,即没有匹配的重载,并且唯一的候选者将被reset(?) 所以这显然是一个错误。

最近修复了这个问题,在cdt 8.1.1中。 只需去帮助 - >检查更新,它将被下载并安装。 我已经测试了unique_ptr并且它被正确编入索引。

我在更新版本的Eclipse CDT(9.3)上遇到了同样的问题。 我尝试了我在互联网上找到的所有技巧,每次我的索引重建,希望改变。 但索引器永远无法推断出std::unique_ptr<T>::operator->() 最后,我决定使用一个非常简单的解决方法:

# ifdef ECLIPSE_INDEXER_WORKAROUND
MyType* my_var;
# else
std::unique_ptr<MyType> my_var;
# endif    

我在Eclipse中将ECLIPSE_INDEXER_WORKAROUND添加到预处理器符号(当然仅用于索引选项,而不是构建),索引再次有用!

为了减少污染代码,我们可以使用宏:

# ifdef ECLIPSE_INDEXER_WORKAROUND
#  define MY_UNIQUE_PTR( type ) type* 
# else
#  define MY_UNIQUE_PTR( type ) std::unique_ptr< type >
# endif

MY_UNIQUE_PTR( int ) pint{ new int(42) };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM