Я использую любопытно повторяющийся шаблон шаблона для создания общего указателя следующим образом (см. Ниже). On Derived :: create (...) Visual Studio IntelliSense показывает, чем доступные аргументы (Args & & ... args). Как передать список аргументов конструктора Derived class в Base, чтобы IntelliSense показывал мне, что доступными аргументами являются (const std :: string & str, int i)?Любопытно повторяющийся шаблон шаблона (CRTP) и производные аргументы конструктора
#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);
}
Вам нужно будет удалить версию пересылки и создать перегрузки для каждого конструктора. Intellisense видит интерфейс функции для того, что он есть, как он должен знать, что вы пересылаете конструктору (ему дополнительно придется пройти через make_shared, чтобы понять это). – jepio
@jepio Я серьезно не согласен! Это именно то, что я имею в виду: не нужно делать: «И вы не должны ориентировать свои проекты на возможности вашей среды IDE, но то, что компилируется и работает хорошо». _ –
Я не говорю, что он должен это делать. Я говорю ему, что он должен делать, и что невозможно/необоснованно ожидать, что он будет работать. – jepio