Eclipse CDT indexing and 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);
但是,我收到了来自EclipseCDT的错误消息。在第四行:方法"insert"无法解析,方法"end"无法解析。
以前,我在std::unique_ptr这个名称的外观上也遇到过错误。这是通过设置预处理器符号__GXX_EXPERIMENTAL_CXX0X__
和重建索引来解决的,如该问题的答案中所述。
有没有一种方法可以让CDT理解s的类型是std::string*,并且它应该在std::string中查找s->insert()和s->end()?
附言:我使用的是Eclipse 3.7.1和CDT 8.0.0.2011 1106081058
PS2:我本想在上面的问题中发表评论,但我不能,大概是因为我是一个新用户
Eclipse CDT索引器似乎无法推导出unique_ptr::指针类型,该类型也用作运算符->()的返回类型。当你键入类似的内容时,你可以看到这一点
std::unique_ptr<Type *> ptr;
ptr.reset(new Type);
将"检测到"一个错误,即没有匹配的过载,并且唯一的候选者将是reset(?)
。所以这显然是一个bug。
这个问题最近在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) };
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误