所以我正在嘗試撰寫一個演算法推導器來推導/評估簡單的多項式。我的運算式邏輯如下:有常量和變數,組合成乘法或加法運算式。在我的運算式類中,我有一個方法導數,它應該回傳不同的運算式,具體取決于運算式是加法還是乘法。這是我的代碼:
enum OP_enum {Add, Multiply};
//********
template<typename T>
class Constant {
public:
Constant(const T & v) : val_(v) {}
T operator()(const T &) const {
return val_;
}
Constant<T> derivative(){
return Constant<T>(0);
}
private:
T val_;
};
//********
template <typename T>
class Variable {
public:
T operator()(const T & x) const {
return x;
}
Constant<T> derivative(){
return constant(1);
}
};
//********
template<typename L, typename R, OP_enum op>
class Expression {
public:
Expression(const L & l, const R & r) : l_(l), r_(r) { }
template <typename T>
T operator()(const T & x) const {
switch (op) {
case Add:
return l_(x) r_(x);
case Multiply:
return l_(x) * r_(x);
}
}
/*RETURN TYPE*/ derivative() {
switch (op) {
case Add:
return l_.derivative() r_.derivative();
case Multiply:
return l_.derivative() * r_ l_ * r_.derivative();
}
}
private:
L l_;
R r_;
};
//********
template<typename L, typename R>
Expression<L, R, Add> operator*(const L & l, const R & r) {
return Expression<L, R, Add>(l, r);
}
template<typename L, typename R>
Expression<L, R, Multiply> operator (const L & l, const R & r) {
return Expression<L, R, Multiply>(l, r);
}
有沒有辦法可以很好地指定回傳型別?(它應該是
Expression<RETURN TYPE of derivation called on L, RETURN TYPE of derivation called on R, Add>
Expression<Expression<RETURN TYPE of derivation called on L, R, Multiply>, Expression<L, RETURN TYPE of derivation called on R, Multiply>, Add>
取決于是求和還是乘積)
我已經嘗試過 std::conditional 和一些帶有 decltype 的東西
uj5u.com熱心網友回復:
auto derivative() {
if constexpr (op == Ad)
return l_.derivative() r_.derivative();
else if constexpr (op == Multiply)
return l_.derivative() * r_ l_ * r_.derivative();
}
if constexpr如果分支推匯出不同的型別,則需要 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380315.html
