math : 模板专业化 =0 对于任何其他 类

math : template specialization =0 for any other classes

我解释一下我的问题。我想用模板一般的东西来编写数学代码。到目前为止,我已经制作了两个 classes。我有一个

template<typename T> class rational{
    T numerator;
    T denominator;
    operators and constructors
}

我有一个

template<typename T> class polynomial{
    vector<T> coefficients;
    int degree;
    operators and constuctors
}

制作这些是为了让我可以使用 rational<polynomial<rational<int>>>。到目前为止这有效。但我想在那些 class 上添加一个导数。我也想使用它在 T 上的定义在 class<T> 上定义它。这是可以做到的。但是我怎样才能使这个导数在 int、double、fractional<int> 等上为 =0?这就像一个专业化,但对于我没有指定的每种类型......谢谢!在此之后,我尝试对矩阵事物进行模板化...

我们的目标是尽可能地使用模板:-D 接下来我想为多项式使用几个变量......这是一个很棒的项目!

感谢您的帮助/任何信息 =)

我认为答案应该是

template<typename T> T Derivative(T object){ // for any other object !
return T(0);}

template<typename T> polynomial<T> Derivative(polynomial<T> object)
return compute_of_derivative, using too Derivative over T too (for generality);}

template<typename T> rational<T> Derivative(rational<T> object) // kind P / Q
return compute_of_derivative, which is ( D(P)Q -Q D(P) /  Q^2 );}

这有效吗? :-/ 我会尽快尝试...

I want to define a function Derivative that returns 0 everytime, but I want my derivative to return something computed for the class polynomial and for the class fractional. That's my only problem now.

你可以通过重载导数函数来做到这一点:

#include<iostream>

template<typename T> struct polynomial{};
template<typename T> struct rational{};

template<typename T>
auto derivative(T t) {  std::cout<<"I'm zero"<<std::endl;  }

template<typename T>
auto derivative(rational<T> t) { std::cout<<"I'm a rational number"<<std::endl; }

template<typename T>
auto derivative(polynomial<T> t) { std::cout<<"I'm a polynomial"<<std::endl; }

int main()
{
    derivative(rational<double>{});
    derivative(polynomial<double>{});
    derivative(int{});
}

DEMO