다음과 같이 공유 포인터를 만드는 데 이상한 반복 템플릿 패턴을 사용하고 있습니다 (아래). On Derived :: Create (...) Visual Studio IntelliSense는 사용 가능한 인수가 (Args & & ... args)보다 큼을 보여줍니다. 전달 방법 IntelliSense에서 사용 가능한 인수가 (const std :: string & str, int i)라고 표시되도록 파생 클래스 생성자 인수 목록을 Base에 전달하는 방법?CRTP (Curiously Recurring Template Pattern) 및 파생 생성자 인수
#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