小编Max*_*its的帖子

struct / class包装中的C ++重载自动运算符

想象一下,您有一个简单的2D点对象,其中包含两个设置器和获取器。

template <typename T>
class Point
{
public:
    Point(T x, T y);

    T getX() const;
    T getY() const;

    void setX(T x);
    void setY(T y);

private:
    T _x;
    T _y;
};
Run Code Online (Sandbox Code Playgroud)

但是我想以更“类似于脚本”的语法来使用此类。就像是 :

auto point = Point<double>(10, 10);
point.x = 20;
point.y = point.x + 10;
Run Code Online (Sandbox Code Playgroud)

您会说,只需使用带有公共变量的结构:

template <typename T>
struct Point
{
    T x;
    T y;
};
Run Code Online (Sandbox Code Playgroud)

是的,但是我想保留参数的私密性,并使用某些方法扩展类。因此,另一个想法是制作一个包装助手,将操作符别名添加到setters / getters中:

template <typename T, typename Get,  Get(T::*Getter)() const,
                      typename Set, void(T::*Setter)(Set)>
struct ReadWrite
{
    ReadWrite(T& ptr) : ptr(ptr) {}

    inline void …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading wrapper template-meta-programming auto

3
推荐指数
1
解决办法
155
查看次数