【发布时间】:2022-01-09 10:50:48
【问题描述】:
所以我正在尝试编写一个算法导数,以推导/评估简单的多项式。 我的表达式逻辑如下:有常量和变量,组合成乘法或加法表达式。 在我的表达式类中,我有方法导数,它应该返回不同的表达式,具体取决于表达式是加法还是乘法。 这是我的代码:
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 的一些东西
【问题讨论】:
标签: c++ templates return-type trailing-return-type