我正在尝试在C ++中定义一个结构,该结构具有返回其自身类型的预定义值的属性。
像许多用于矢量和颜色的API一样:
Vector.Zero; // Returns a vector with values 0, 0, 0
Color.White; // Returns a Color with values 1, 1, 1, 1 (on scale from 0 to 1)
Vector.Up; // Returns a vector with values 0, 1 , 0 (Y up)
来源:http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx (MSDN的颜色类型页面)
我一直在努力寻找好几个小时,但我不能因为我的心脏而弄清楚它的名字。
答案 0 :(得分:4)
//in h file
struct Vector {
int x,y,z;
static const Vector Zero;
};
// in cpp file
const Vector Vector::Zero = {0,0,0};
喜欢这个吗?
答案 1 :(得分:2)
这是一个静态属性。不幸的是,C ++没有任何类型的属性。要实现这一点,您可能需要静态方法或静态变量。我会推荐前者。
对于Vector
示例,您需要以下内容:
struct Vector {
int _x;
int _y;
int _z;
Vector(int x, int y, int z) {
_x = x;
_y = y;
_z = z;
}
static Vector Zero() {
return Vector(0,0,0);
}
}
然后你会写Vector::Zero()
来获得零向量。
答案 2 :(得分:2)
您可以使用静态成员模仿它:
struct Color {
float r, g, b;
Foo(float v_r, float v_g, float v_b):
r(v_r), g(v_g), b(v_b){};
static const Color White;
};
const Color Color::White(1.0f, 1.0f, 1.0f);
// In your own code
Color theColor = Color::White;