环境是带有clang和g ++的C ++ 14
我正在寻找像
这样的东西"Point somepoint = Point(X=23);"
可以通过调用变量的名称在类中定义值,这应该在初始化时完成。
这里有一个简化的代码来解释我为什么不使用其他方法的问题。
#include <iostream>
using namespace std;
class Point {
public:
int X{4};
int Y{8};
Point(){};
Point(int x) : X{x} {};
Point(int x, int y) : X{x}, Y{y} {};
};
int main() {
const Point one = Point();
const Point two = Point(23);
const Point tri = Point(42,23);
cout << "tri: \t" << tri.X << "\t" << tri.Y << endl;
cout << "two: \t" << two.X << "\t" << two.Y << endl;
cout << "one: \t" << one.X << "\t" << one.Y << endl;
}
有一些变量,每个变量都有一个默认值。 我可以使用不同的值定义变量,但我将使用大多数默认值。有2个变量,只有4种可能,但我的真实代码有超过16个变量。
我可以使用构造函数。由于两种相同的数据类型,这不起作用。 构造函数Point(int X)和Point(int Y)不能在同一个类中。 解决方法是为每个变量定义自己的数据类型。这适用于2个变量,但我的真实代码还有更多。
最简单的想法是构造类,然后定义值。这不起作用,因为一,二和三是常量。
Point master = Point();
master.X = 33;
master.Y = 44;
一个想法是使用模板和基于字符串的自定义数据类型作为名称和值。但是像
这样的东西Point(set("X",3), set("Y",42));
会比
更丑陋,更不易读Point( Y = 3, X = 42)
并且具有实现本身的代码也将更不易读。在许多变量的情况下,它是一个重大问题。
我希望我能很好地解释我的问题以及为什么我要使用名字。 希望有人能为此找到解决方案。
最好的问候 保罗