簡體   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