У меня есть следующий код:
struct Operation {
public :
OperationName name;
};
struct FilterOperation : Operation {
FilterName filter;
std::list<std::string> params;
};
OperationName и FilterName представляют собой перечисления, перечисляющие все различные имена каждой операции и фильтра.
В a для каждого цикла, проходящего через всеОперации, я хочу понизить Операцию до FilterOperation:
std::list<Operation> operations
for (Operation op : operations) {
switch (op.name) {
case o_filter :
std::cout << dynamic_cast<FilterOperation*>(&op)->filter << std::endl;
}
}
Очевидно, что dynamic_cast здесь не работает:
parser.cpp:154:90: error: cannot dynamic_cast ‘& op’ (of type ‘struct Operation*’) to type ‘struct FilterOperation*’ (source type is not polymorphic)
"Op: Filter, Name: " << filterStrings[dynamic_cast<FilterOperation*>(&op)->filter]
Я фактически пытался добавить к нему виртуальную функцию, ноэто не решает мою реальную проблему (я не могу понять, как правильно опускать здесь)