Как показывает вопрос, у меня есть метод следующим образом:
template<typename LN, typename RN, typename LV, typename RV>
VariableValue dataArithmetic(LN leftNode, RN rightNode, LV leftV, RV rightV) {
if (leftNode.type() == typeid(ChartData*) && rightNode.type() == typeid(ChartData*)) {
ChartData* temp1 = boost::get<ChartData*>(leftNode);
ChartData* temp2 = boost::get<ChartData*>(rightNode);
temp1->data *= temp2->data; // <----------------
return temp1;
}
else if (leftNode.type() == typeid(ChartData*) || rightNode.type() == typeid(ChartData*)) {
if (leftNode.type() == typeid(ChartData*)) {
ChartData* temp = boost::get<ChartData*>(leftNode);
float value = boost::lexical_cast<float>(rightV);
temp->data *= value; // <----------------
return (VariableValue)temp;
}
else if (rightNode.type() == typeid(ChartData*)) {
ChartData* temp = boost::get<ChartData*>(rightNode);
float value = boost::lexical_cast<float>(leftV);
temp->data *= value; // <----------------
return (VariableValue)temp;
}
}
return 0;
}
В настоящее время этот метод закодирован для применения умножения, как показано // <----------------
Однако мне нужен этот метод для поддержки всех основных c арифметика c значения + - * /
Учитывая, что эта функция вызывается с помощью:
VariableValue dataArith = dataArithmetic(leftNode, rightNode, leftV, rightV);
Я бы хотел, чтобы метод принял параметр, который указывает, какой математический оператор должен применяться таким образом как:
VariableValue dataArith = dataArithmetic(leftNode, rightNode, leftV, rightV, **MULTIPLICATION**);
Каков наилучший способ сделать это?