我要访问模板参数。这段代码works:-
template<int s1,int s2> class Setting{public:
static const int setting1=s1;
static const int setting2=s2;
};
class Album{
public: using Setting_unique =Setting<1,2> ;
public: using Setting_share =Setting<4,7> ;
};
template<class Setting_X> class SmartPtr{
public: void doSomething(){
if constexpr(Setting_X::setting1==1){
// ^ intellisense sad :(
}
}
};
int main(){ SmartPtr<Album::Setting_unique> a; }
^但是,智能感知对此并不满意。
我不能做我的ctrl+space
。
以下是使Intellisense再次运行的技巧。它还works:-
class Helper{public: // **new class**
int setting1=0;
int setting2=0;
public: constexpr Helper(int setting1P,int setting2P)
: setting1(setting1P), setting2(setting2P){ }
};
template<int s1,int s2> class Setting{
// **new function**
public: static constexpr Helper getHelper(){return Helper(s1,s2);}
};
class Album{
public: using Setting_unique =Setting<1,2> ;
public: using Setting_share =Setting<4,7> ;
};
template<class Setting_X> class SmartPtr{
static constexpr Helper setting = Setting_X::getHelper();
public: void doSomething(){
if constexpr(setting.setting1==1){
// ^ intellisense happy :) -
// It shows "setting1" & "setting2" in a drop-down list.
}
}
};
int main(){SmartPtr<Album::Setting_unique> a; }
这是我想要的下拉列表:-
问题是:我的代码变得难以重构和弄脏。
如果将来我可以添加新的s3
,则还有更多代码等待编辑的位置。
如何在保持可维护性水平的同时使智能感知满意?
我正在使用 Visual Studio 2017 + Resharper 。
(可选)但是,如果该解决方案不依赖于Resharper,那将很酷,或者它也可以应用于大多数IDE。
很抱歉,这个问题听起来很琐碎,但是ctrl+space
是我的生活。