【发布时间】:2017-03-12 13:42:43
【问题描述】:
如果我编码:-
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)
在实际使用中,我正在尝试创建一些自定义智能指针 + 池,
并且我希望 Reshaper 在用户文件中正确推荐#include。
std::make_shared 也会发生这种情况。
编辑:-
正如 Igor 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();
}
【问题讨论】:
标签: c++ resharper c++14 shared-ptr unique-ptr