小编use*_*744的帖子

使用enable_if检查参数包的类型

由于对允许的非类型可变参数模板有限制,我试图编写一个使用任意数量的双精度函数enable_if.从本质上讲,我想做的事情如下:

    template<typename... T,
    typename = typename std::enable_if<std::is_convertible<T, double>::value, T>::type>
    foo(T... t){ /* code here */ }
Run Code Online (Sandbox Code Playgroud)

我选择将其enable_if作为未命名参数的默认值,因为我的函数实际上是一个构造函数,并且没有返回值.这适用于单个参数,但由于变量模板T是参数包,因此上述代码无效.那么,我如何检查每个参数是否可以转换为double?

c++ templates variadic-templates

12
推荐指数
2
解决办法
2307
查看次数

泛型约束中的泛型类型

我希望能够指定这样的东西:

public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
    where TFilterControl : FilterControl<>, new()
    where TCell : IView, new()
{
}
Run Code Online (Sandbox Code Playgroud)

类 FilterControl<> 是一个基类。我不知道 FilterControl<> 的通用参数是什么。

c# generics

5
推荐指数
1
解决办法
754
查看次数

在C中共享用于科学计算的通用数据

在我被迫使用C进行科学计算的作业中(而不是说C++,我的默认选择),我经常会遇到以下模式:

通常,许多功能通常需要一组数据.例如,在求解微分方程时,我需要知道点的数量,方程的参数等:

struct parameters{
    unsigned int num_x;
    double length_x;
    // so forth
};
Run Code Online (Sandbox Code Playgroud)

我经常最终不得不将它们组合在一个结构中,然后最终在几乎所有功能中重复自己:void f(struct parameters* p, ...).如果每个函数都将它作为其界面的一部分是有意义的,那就不会那么糟糕了,但情况并非总是如此,我仍然不喜欢重复.

此外,将所有这些参数放在一个结构中并不总是有意义的,但将其拆分会使界面更难以管理.

是否有任何变通办法或有用的设计模式来处理这个问题?建立一个全球性的方法p可以解决这个问题,但是当一般不推荐使用全局时,很难证明这一点是合理的.

c design-patterns dry scientific-computing

2
推荐指数
1
解决办法
110
查看次数

向量不是可递增的错误

我正在用C++编写一个实现Newton-Raphson方法的程序,除此之外,还定义了一个多项式类:

#include <iostream>
#include <algorithm>
#include <utility>
#include <string>
#include <cmath>
#include <vector>
#include <set>

using namespace std;

class polynomial{

    using pair_dd = pair<double, double>;

public:
    polynomial(const vector<pair_dd>& v) : m_coeff(simplify(v)) {} // constructor
    polynomial(const polynomial& p) : m_coeff(p.m_coeff){} // copy constructor
    polynomial derivative() const{ // computes derivative
        vector<pair_dd> dcoeff;
        for_each(begin(m_coeff), end(m_coeff), [&](pair_dd p){
            dcoeff.emplace_back(pair_dd(p.first*p.second, p.second - 1));
        });
        return polynomial(dcoeff);
    }
    double apply(double x) const{ // applies poly to argument
        auto sum(0.0);
        for_each(begin(m_coeff), end(m_coeff), [&](pair_dd p){
            sum += p.first*pow(x, …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

0
推荐指数
1
解决办法
103
查看次数