Добрый день! Нужно передавать копию объекта
Holder<A>
в часть кода которая не знает о классе "A" ничего, но знает что такое BaseHolder. Я нашел такое решение:
#include <iostream>
#include <memory>
using namespace std;
class BaseHolder {
public:
virtual void Set(int i) = 0;
virtual int Get() = 0;
};
template <typename T>
class Holder: public BaseHolder {
public:
virtual void Set(int i) {
if (t == nullptr) {
t = new T();
}
t->Set(i);
}
virtual int Get() {
if (t == nullptr) {
t = new T();
}
return t->Get();
}
private:
T *t = nullptr;
};
class A {
public:
void Set(int i) {
count = i;
}
int Get() {
return count;
}
private:
int count = 0;
};
int main()
{
int size = sizeof(Holder<A>);
BaseHolder *h = new Holder<A>;
// В этой части, программа, не должна знать о шаблонном классе.
BaseHolder *j = (BaseHolder*)malloc(size);
memcpy(j, h, size);
h->Set(5);
j->Set(7);
cout << "h: " << h->Get() << endl;
cout << "j: " << j->Get() << endl;
delete(h);
delete(j);
return 0;
}
Подскажите пожалуйста, есть ли тут какие-то ошибки и можно ли сделать как-нибудь по-другому? Суть проблемы в том, что есть большой кусок кода, который неохота делать шаблонным и поэтому я пришел к варианту с наследованием.