Ich lerne C++. Ich möchte den Compiler veranlassen, nullptr als shared_ptr abzuleiten. Bitte lesen Sie den folgenden Code,Wie kann ich Compiler eine Art von Nullptr ableiten lassen?
struct A {};
struct B {
std::shared_ptr<A> a;
};
struct Tag {
std::shared_ptr<B> b;
};
auto GetSharedPtrClassB(Tag* tag) {
if (tag) {
auto& sharedB = *(tag->b);
return sharedB.a;
} else {
return nullptr; // Error : compiler cannot deduce type of nullptr.
}
}
In GetSharedPtrClassB
, nullptr
nicht als std::shared_ptr<A>
abgeleitet werden. Die Fehlermeldungen sind folgende,
error: inconsistent deduction for ‘auto’: ‘std::shared_ptr<A>’ and then ‘std::nullptr_t’
Wie kann ich lassen Compiler deduce nullptr als std::shared_ptr<A>
? Ich kann einen Typ decltype(*(tag->b))
bereitstellen, aber ich kann nicht an den nächsten Schritt denken, um einen Typ std::shared_ptr<A>
bereitzustellen.
Vielen Dank.
Wie über explizite Verwendung von 'std :: shared_ptr ' als Rückgabetyp? Oder geben Sie ein Standard-Konstrukt 'std :: shared_ptr ' -Objekt im 'else'-Fall zurück? –
@Someprogrammerdude: Danke für das Kommentieren. In meinem tatsächlichen Code kann Klasse A wegen Meta-Programmierung C sein. Also ich möchte den Typ shared_ptr <'X'> ableiten lassen. – mora
Es ist besser, das tatsächliche Problem zu zeigen, da jetzt jeder erraten muss, welcher Ansatz am besten passt ([XY Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)) ... Sehen Sie auch, wie Sie eine gute Frage stellen können: [mcve] (https://stackoverflow.com/help/mcve) –