什么是实现在C指针到构件构造的各种选项++ / CLI?

我已经实现了一些2D几何算法,其进行基于X和Y坐标的一些动作。我发现,我经常为Y轴重复一次代码为X轴和一次。一个例子是找到最大和最小边界沿每个轴

如果我已经使用本机C ++,我可以用一个指针到X或Y构件(也宽度,高度等),并通过它在作为参数,这样我需要实现每个算法一次。但随着C ++ / CLI,这是不可能的。我有哪些选择?我寻找的东西有效,重量轻和简洁。

有帮助吗?

解决方案

我会做参数模板类型参数,而是和使用封装属性访问函子。 E.g:

ref class Point {
     property int X;
     property int Y;
};

struct Point_X_accessor
{
     static int get(Point^ p) { return p->X; }
     static int set(Point^ p, int value) { p->X = value; }
};

struct Point_Y_accessor
{
     static int get(Point^ p) { return p->Y; }
     static int set(Point^ p, int value) { p->Y = value; }
};

template <class PointAccessor>
int some_algorithm(Point^ p) { ... }

some_algorithm<Point_X_accessor>(p);
some_algorithm<Point_Y_accessor>(p);

当然,这仅是有道理的,如果你有足够多足够长的算法来证明所有的样板。虽然包装可以既产生并通过一个宏引用,削减代码行相当多。

其他提示

选项1:如果X和Y被暴露为公共成员,则可以将它们定义为一个匿名联盟的一部分,e.g:

class Shape {
public:
    union {
        struct { double X; double Y; };
        double point[2];
    };
    ...
};

此可以访问X作为要么shape.X或shape.point [0],并且类似地,如shape.Y shape.point [1]。

选项2:如果X和Y被暴露为属性,可以有自己的getter / setter方法访问两个元件的部件阵列,然后暴露阵列作为只读属性太。同时主叫方无法修改数组属性,但它仍然可以修改它的元件。

选项3:不好,不是一种选择,真的。不要使用.NET反射按名称访问属性。运行时成本太高。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top