相关疑难解决方法(0)

C++中的本地C++属性?

C#/.NET中,您可以执行以下操作:

someThing.text = "blah";
String blah = someThing.text;
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码实际上并没有直接与someThing的文本字符串进行交互,它使用了get和set属性.同样,可以使用只读属性.

有没有办法在本机C++中做类似的事情?(不是C++ .NET)

c++

22
推荐指数
4
解决办法
1万
查看次数

C++11 是否有相当于 Python 的 @property 装饰器?

我真的很喜欢Python的@property装饰器;IE,

class MyInteger:
    def init(self, i):
        self.i = i

    # Using the @property dectorator, half looks like a member not a method
    @property
    def half(self):
         return i/2.0
Run Code Online (Sandbox Code Playgroud)

我可以使用 C++ 中的类似构造吗?我可以用谷歌搜索,但我不确定要搜索的术语。

c++ python decorator c++11

6
推荐指数
1
解决办法
1260
查看次数

创建一个从其他类成员自动计算的类成员?

  1. 在编程方面,我是一个绝对的新手,我试图通过解决C++中一些简单的"问题"来自学基础知识.

  2. 我已经在网上搜索了我的问题的确切答案,然后在这里发布并且到目前为止还没找到,但这可能是因为(1).

所以,我正在寻找的是一种声明一个类成员的方法,该类成员可以从同一个类的其他成员自动计算,因此计算出来的类成员可以像显式定义的类成员一样使用.例如,想象一个名为creature的结构,它具有属性/ members creature.numberofhands,creature.fingersperhand,最后是属性creature.totalfingers,它们自动从上面的成员计算出来.

以下是我最接近我想达到的目标的一个例子:

#include <iostream>

typedef struct creature {
    int numberofhands;
    int fingersperhand;
    int totalfingers();
} creature;    

int creature::totalfingers()
{
    return numberofhands * fingersperhand;
};

int main()
{
    creature human;
    human.numberofhands = 2;
    human.fingersperhand = 5;

    printf("%d",human.totalfingers());
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

对此我真烦恼的是,我必须从明确定义的那个中处理计算出的一个,即我必须在它之后加上"()".我怎样才能更改代码,所以我可以使用:human.totalfingers而无需明确定义它?

c++ class

4
推荐指数
1
解决办法
118
查看次数

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
查看次数

如何模拟 C# 的 {get; 在 C++ 中设置;}?

我正在尝试 lambda 函数,并设法在 C++ 中重新创建“获取”功能。我可以在不使用括号的情况下获取函数的返回值。这是一个示例类,我在其中实现:

using namespace std;

struct Vector2 {
    float x;
    float y;
    float length = [&]()-> float {return sqrt(x * x + y * y); }();
    float angle = [&]()-> float {return atan2(y, x); }();

    Vector2() : x(0), y(0) {}
    Vector2(float a, float b) : x(a), y(b) {}
    ~Vector2() {}
    Vector2(Vector2& other) : x(other.x), y(other.y) {}
    Vector2(Vector2&& other) = delete;
    void operator =(Vector2&& other) noexcept{
        x = other.x;
        y = other.y;
    }
};

int main()
{
    Vector2 …
Run Code Online (Sandbox Code Playgroud)

c++

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