Я хочу получить доступ к параметру шаблона.Этот код работает : -
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; }
^ Тем не менее, intellisense это не устраивает.
Я не могу сделать ctrl+space
.
Ниже мой трюк, чтобы заставить Intellisense работать снова.Это также работает : -
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
- это моя жизнь.