奇怪的重复模板模式(CRTP)和派生的构造函数参数

时间:2015-02-07 20:58:59

标签: c++ c++11 intellisense variadic-templates crtp

我正在使用奇怪的重复模板模式以下面的方式创建共享指针(下面)。 On Derived :: create(...)Visual Studio IntelliSense显示的可用参数是(Args&& ... args)。如何将Derived类构造函数参数列表传递给Base,以便IntelliSense向我显示可用参数是什么(const std :: string& str,int i)?

#include <memory>
#include <string>

template<typename T>
class Base
{
public:
    template<typename... Args >
    static std::shared_ptr<T> create(Args&&... args)
    {
        return std::make_shared<T>(std::forward<Args>(args)...);
    }
};

class Derived : public Base<Derived>
{
public:
    Derived(const std::string &str, int i) {}
};

int main()
{
    auto derived = Derived::create("text", 123);
}

1 个答案:

答案 0 :(得分:0)

  

&#34;如何将Derived类构造函数参数列表传递给Base,以便IntelliSense向我显示可用的参数是(const std :: string&amp; str,int i)?&#34;

#include <string>
#include <memory>

template<typename T>
class Base {
public:
    template<typename... Args >
    static std::shared_ptr<T> create(Args&&... args) {
        return std::make_shared<T>(std::forward<Args>(args)...);
    }
};

class Derived : public Base<Derived> {
public:
    Derived(const std::string &str, int i) {}
};

int main() {
    auto derived = Derived::create("text", 123);
}

好吧,你的code just compiles fine

任何IDE的Intellisense功能总是与用于它们的c ++解析器一样好。这完全依赖于实际使用的IDE,并且您不应该根据IDE的功能来定位您的设计,但是编译和运行良好。