У меня есть следующий тестовый код. Здесь вывод «от родителя», как я могу вызвать дочернюю функцию? Почему дочерняя функция не вызывается? рекомендуется наследовать от синглтона?
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton& getInstance()
{
static Singleton s;
return s;
}
virtual void func()
{
cout << "from parent" << endl;
}
};
class Child : public Singleton
{
public:
void func() override
{
cout << "from child" << endl;
}
};
int main()
{
Singleton& s = Child::getInstance();
s.func();
}
Чтобы вызвать
Child::func()
, вам нужен объект типаChild
(или, возможно, производный от него тип). Какая строка в вашем коде создает объект типаChild
?getInstance
возвращает ссылку на объектSingleton
, а не на объектChild
.Я полагаю, что если бы вы хотели иметь синглтон с дочерними классами, не желая переписывать
getInstance
для каждого из них, вы могли бы использовать CRTP, но неясно, зачем вам это нужно. Что вы пытаетесь сделать с этим шаблоном?Привет @NathanPierson. Родительский класс используется для фактической реализации, а дочерний класс будет иметь некоторые конкретные фиктивные реализации для обхода некоторых операций. Дочерний элемент будет использоваться для тестирования определенных разделов родителя.