C ++ / CLI成员指针
-
13-09-2019 - |
题
什么是实现在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反射按名称访问属性。运行时成本太高。
不隶属于 StackOverflow