Posso manter um shared_ptr sem saber o parâmetro de tipo? [duplicado]
Aug 17 2020
Eu gostaria de realizar uma shared_ptr
aula de modelo. No entanto, não quero tornar a classe B uma classe de modelo também. No meu entendimento, shared_ptr com qualquer tipo terá o mesmo layout de memória. Então, estou querendo saber alguma solução alternativa neste cenário?
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
Respostas
2 AtnNn Aug 17 2020 at 17:19
Quando o tipo não importa, void
pode ser usado.
template <typename>
class C {};
std::shared_ptr<void> p = std::make_shared<C<int>>();
Adicionar uma classe base monomórfica permite restringir o tipo que pode ser armazenado.
class AnyC {};
template <typename>
class C : public AnyC {};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
Se essa classe base tiver métodos virtuais, eles podem ser chamados por meio do ponteiro.
class AnyC {
virtual void f();
};
template <typename>
class C : public AnyC {
void f() override;
};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
p->f();
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas