Iコード場合: -Resharperはハードコードでstd :: make_uniqueを認識しますか?
class B; //some B.h has definition of B
std::make_unique<B>();
ReSharperのは、私がB.h
を含まなければならないことを私に警告します。 (正しい)
タイプ 'B' 私は
std::unique_ptr<T>
のコードを模倣しTest.h
内に置くしようとした場合、しかし、
不完全である: -
をTEST.H
//inside class Test
template<class _Ty,
class... _Types> inline
typename std::enable_if<!std::is_array<_Ty>::value,
std::unique_ptr<_Ty> >::type test2(_Types&&... _Args)
{ // make a unique_ptr
return (std::unique_ptr<_Ty>(new _Ty(std::forward<_Types>(_Args)...)));
}
test.cpp
#include "Test.h"
//inside some function
test2<B>();
私は警告を受けません。 (Bが不完全であるため、それは互換性のないです。)
質問ReSharperのは約
std::make_unique
チェックをハードコーディングしていますか?もしそうでなければ、Resharperが正しく推奨する方法でコーディングする方法はありますか? (
B.h
を含む必要があります)
実際の使用では、カスタムスマートポインタ+プール
を作成しようとしていますが、ユーザーのファイルに#include
を正しくお勧めします。
std::make_shared
にも発生します。
編集: - イゴールAkhmetovは、それがハードコードされたことを述べたように
、とにかく私はでき手掛かりReSharperのがありますか?例えば: -
//Hey, Resharper, the user must include full definition of "T".
// Resharper, forward declaration is not enough for "T".
template<class T> T* f(){
return new T();
}
ありがとう!しかし、少し残念ですが、この機能を実装するのがどれほど難しいか理解できます。 .....ところで、Resharperを手がかりにする方法はありますか? (質問を編集しました) – javaLover
現時点ではこれを行う方法はありません。自然なアプローチは特別な属性を持つことですが、C++のテンプレートパラメータには属性を適用できないようです。私はhttps://youtrack.jetbrains.com/issue/RSCPP-19172を提出しました。私たちはそれをやり遂げる何らかの方法を考え出すことができます。 –
Resharper C++の自動補完機能に関するもう1つの質問があります。 Resharperがそれを行うことができるかどうかわからない。あなたが見ていただければ幸いです。 http://stackoverflow.com/questions/43164856/autocompletion-of-parameter-list-static-fields-without-typing-a-classname – javaLover