我正在使用奇怪的重复模板模式以下面的方式创建共享指针(下面)。 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);
}
答案 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的功能来定位您的设计,但是编译和运行良好。