受其他計算函式泰勒級數的問題(原始問題)的啟發,我撰寫了一個沒有任何約束的模板來成功計算總和。這是當前代碼(模板主體已洗掉,因為@Elliott 說它與這一點無關......):
#include <iostream>
#include <cmath>
#include <limits>
template<typename ftn>
long double Taylor_sum(ftn terms_to_sum) { /* Summation calculation goes here... */ return result; };
int main(){
using namespace std; long double x; cin >> x ;
long double series_sum = Taylor_sum([x](unsigned long long int i) -> long double { return /*Taylor term here*/; });
if (!isfinite(series_sum)) cout << "Series does not converge!" << endl;
else {
cout << "Series converged, its value is : " << series_sum << endl;
cout << "Compared to sin : " << sinl(x) << endl;
}
}
盡管代碼足夠有效,為了concept自己學習和練習,我試圖限制模板只接受 lambdaunsigned long long int作為輸入和long double輸出。這是我當前的嘗試(無法編譯):
template<typename T,integral ARG>
concept my_lambda = requires(T t, ARG u) {
{ return t(u); };
}
template<my_lambda ftn>
long double Taylor_sum(ftn term) { //The rest is same...
我搜索了各種資源,但在我看來,由于conceptC 20 中相對較新的特性,可用的材料似乎較少。有誰知道如何正確限制我的模板引數?
uj5u.com熱心網友回復:
我試圖限制模板只接受 lambda
unsigned long long int作為輸入和long double輸出。
您可以將復合需求與return-type-requirement一起使用:
template<typename F>
concept my_lambda = requires(F f, unsigned long long int x) {
{ f(x) } -> std::same_as<long double>;
};
template<my_lambda ftn>
long double Taylor_sum(ftn term) { //The rest is same...
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433968.html
上一篇:Ansible模板變數型別評估
