访问模板参数时提高VS的Intellisense建议能力

时间:2019-02-19 11:25:25

标签: c++11 templates resharper c++17 intellisense

我要访问模板参数。这段代码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; }

这是我想要的下拉列表:-

enter image description here

问题是:我的代码变得难以重构和弄脏。
如果将来我可以添加新的s3,则还有更多代码等待编辑的位置。

如何在保持可维护性水平的同时使智能感知满意?

我正在使用 Visual Studio 2017 + Resharper
(可选)但是,如果该解决方案不依赖于Resharper,那将很酷,或者它也可以应用于大多数IDE。

很抱歉,这个问题听起来很琐碎,但是ctrl+space是我的生活。

0 个答案:

没有答案