Имеется такая ужасная функция:
void someFunction(int index, Value &value) {
switch(index) {
case 0: {
SomeTypeOne t = someObject->someMethodOne(); // возвращает SomeTypeOne
value.type = "SomeTypeOne";
// value.ptr = ???
} break;
case 1: {
SomeTypeTwo t = someObject->someMethodTwo(); // возвращает SomeTypeTwo
value.type = "SomeTypeTwo";
// value.ptr = ???
} break;
default: ;
}
}
И такая скромная структура для перноса значений:
struct Value {
QString typeName; // строка
void *ptr;
}
Смысл в том, что там где я вызываю функцию
someFunction(), мне не нужно знать типы передаваемых значений (они мне вообще неизвестны), но само значение нужно передать в другую похожую функцию, которая будет знать что делать с void *ptr.
Как мне это значение (переменная
t) скопировать в
Value?
value.ptr = reinterpret_cast<void*>(&t);
живёт не долго, да и не факт что выживет вообще.
*reinterpret_cast<SomeTypeOne*>(value.ptr) = t;
работает только если в
*ptr была заранее выделена память под
SomeTypeOne, но этого я делать не могу, так как тип
SomeTypeOne не известен в моей области видимости. Как быть?