someThing.text = "blah";
String blah = someThing.text;
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码实际上并没有直接与someThing的文本字符串进行交互,它使用了get和set属性.同样,可以使用只读属性.
有没有办法在本机C++中做类似的事情?(不是C++ .NET)
我真的很喜欢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++中一些简单的"问题"来自学基础知识.
我已经在网上搜索了我的问题的确切答案,然后在这里发布并且到目前为止还没找到,但这可能是因为(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而无需明确定义它?
想象一下,您有一个简单的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
我正在尝试 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)