我在c#中有这样的方法:
public double[] GetCoordinates(Func<Point3D, double> func)
{
var values = new List<double>();
foreach (var p in _points)
{
values.Add(func(p));
}
return values.ToArray();
}
我可以这样称呼它:
GetCoordinates(d => d.X)
GetCoordinates(d => d.Y)
GetCoordinates(d => d.Z)
此方法允许您“拉出”不同的数组,具体取决于调用方法时指定的函数。
_points 是 Point3D 结构的列表,Point3D 结构包含三个字段 double x、double y、double z。
该方法是为了结合三种方法而编写的:
public List<double> GetPointsX()
{
List<double> x = new List<double> ();
foreach (var p in _points)
{
x.Add(p.X);
}
return x;
}
public List<double> GetPointsY()
{
List<double> y = new List<double> ();
foreach (var p in _points)
{
y.Add(p.Y);
}
return y;
}
public List<double> GetPointsZ()
{
List<double> z = new List<double> ();
foreach (var p in _points)
{
z.Add(p.Z);
}
return z;
}
本质上执行相同的操作 - 从 Point3D 结构列表返回 x、y、z 的单个值列表
这种组合方法可以用c++重写吗?也许 C++ 中有 Func 委托的类似物?
好吧,实际上,正是在这个公式中(坐标场是对所有风开放的物理场),特定坐标的选择可以通过“经典”C ++ 来实现,而无需使用任何“lambdas”或模板。即 - 通过指向类成员的指针
并打电话给
但是,如果您非常想使用函数对象将点转换为特定坐标,那么使用
std::function<double (const Point3D &)>.或者你可以不用繁琐的
std::function,把自己限制在一个函数指针上在这种情况下,当调用 时
GetCoordinates,我们使用了没有捕获的 lambda 可以隐式转换为常规函数指针的事实。