@ Ответ Криса Дрю работает, если ваши классы наследуются от одного и того же базового класса. Однако, если они этого не делают, есть другой вариант. Вы можете использовать std::optional
для необязательного возврата объекта. Вы можете использовать его как этот
std::pair<std::optional<cat>, std::optional<dog>> makePet(int a)
{
std::pair<std::optional<cat>, std::optional<dog>> pet;
if(a)
pet.first = cat();
else
pet.second = dog();
return pet;
}
Вы можете проверить, какое животное там, проверив std::optional
в паре, как этого
std::pair<std::optional<cat>, std::optional<dog>> pet = makePet(i);
if (pet.first)
{
//Do things with cat
}
else
{
//Do things with dog
}
Будьте осторожны, хотя, что std::optional
все еще является экспериментальным, поэтому он не может быть реализованный вашим компилятором.
Я считаю, что вы ответили на свой вопрос. – Carcigenicate
Вам действительно нужно использовать указатели для использования полиморфизма. Если бы я был вами, я бы сделал шаг назад и просмотрел функции, так как ваше определение ошибочно нечетным образом. – Carcigenicate