unique_ptr
인스턴스를 반환하는 함수에 대한 함수 포인터를 만들려고합니다. 각 함수는 많은 호출자에게 일반적으로 유용하기 위해 가능한 한 구체적으로 형식화 된 값을 반환해야합니다 (실제 코드에서는 함수가 생성자 이름 지정되고 각 객체의 공용 헤더에 있음). 그러나이 특정 용도에서는 각 클래스가 구현하는 일반 인터페이스에만 관심이 있습니다.C++을 반환하는 함수 포인터 11 부모 클래스의 unique_ptrs
을 반환하는 함수를 unique_ptr<Superclass>
을 반환하는 함수 포인터에 할당 할 수없는 문제가 있습니다.
#include <iostream>
#include <memory>
struct Foo {
virtual void foo() = 0;
};
struct Bar : public Foo {
void foo() {};
};
std::unique_ptr<Foo>
foo_creator()
{
return nullptr;
}
std::unique_ptr<Bar>
bar_creator()
{
return nullptr;
}
typedef std::unique_ptr<Foo>(*creator_fn)();
int
main(int argc, char *argv[])
{
std::unique_ptr<Foo> f;
f = foo_creator();
f = bar_creator();
creator_fn foo_fn = foo_creator;
creator_fn bar_fn = bar_creator; // Fails
return 0;
}
나는 그 소리에서 얻을 컴파일 오류가 (Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
) 인 :
cannot initialize a variable of type 'creator_fn'
(aka 'std::unique_ptr<Foo> (*)()') with an lvalue
of type 'std::unique_ptr<Bar>()':
different return type
('unique_ptr<struct Foo>' vs 'unique_ptr<struct Bar>')
내가 더 나은 대해 이야기되기 열려있어
나는이 조각까지 내 예를 삶은 한 내 목표를 달성하는 방법. :-)
인가? 'bar_creator'가'Bar'를 생성하면 안됩니까? – Lii
@Lii 이러한 메서드의 내용은 실제로 문제와 관련이 없습니다. 나는 단지'nullptr'을 반환 할 수 있고 같은 문제를 얻을 수 있다고 생각합니다. 큰 코드에서는'Foo'에서 파생 된 클래스가 실제로 두 개 있습니다. 그러나 이것은 더 단순 해 보입니다. - 추가 혼동을 없애기 위해 nullptr이되도록 코드를 편집합니다. – Shepmaster