当前位置:  开发笔记 > 编程语言 > 正文

成员变量的"适配器"

如何解决《成员变量的"适配器"》经验,为你挑选了1个好方法。

通常,适配器的目的是以修改的格式进行函数调用.有没有办法为成员变量做同样的事情?也就是说,我有一个包含a的对象SomePoint和另一个包含a的对象DifferentPoint.SomePoint其存储的数据作为成员变量资本XY地方AnotherPoint将其存储的数据作为成员变量小写xx.所以问题是你不能编写一个接受a SomePoint或a 的函数,DifferentPoint因为你无法访问.x或者.X(甚至使用模板而没有完全专门针对每个不同的点类型,在这种情况下你可能只是在点上重载类型).

现在的问题是有没有一种方法,使这将产生一个适配器.XSomePoint时候.x请求?这两种点类型都是库类,所以我不能直接编辑任何一个的内部.我还想避免复制数据.



1> TartanLlama..:

通常的方法是编写一个traits类来指定如何获取所需的数据.

这是使用指向成员的可能实现.如果您愿意,可以将它们变成函数或lambdas.

template 
struct PointTraits;

template <>
struct PointTraits {
    constexpr static auto getX = &SomePoint::x;
    constexpr static auto getY = &SomePoint::y;
};

template <>
struct PointTraits {
    constexpr static auto getX = &AnotherPoint::X;
    constexpr static auto getY = &AnotherPoint::Y;
};

然后你会像这样使用它:

template 
void printX (const PointT& point) {
    std::cout << point.*PointTraits::getX;
}

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有