C++类函数获取/设置多个成员

C++类函数获取/设置多个成员,c++,class,C++,Class,我知道我可以定义2n个类函数来获取和设置n个指定的成员值,用于上面的声明 然而,当n很大时,这似乎是不必要的乏味。有没有一种好方法可以定义一个类函数,该函数使用一个额外的参数来设置/获取该类的任何成员 编辑: 撇开语法错误不谈,我使用大n的理由是保留类背后的科学框架。例如,假设这个类是酶。因此,我更愿意将其属性保持在同一位置,而不是按数字索引,除非绝对必要 Set/get函数是公共的,因为它们是在设置GUI的不同类中调用的 而且,不是所有的成员都是INT。为了简单起见,我复制了Pastade。或

我知道我可以定义2n个类函数来获取和设置n个指定的成员值,用于上面的声明

然而,当n很大时,这似乎是不必要的乏味。有没有一种好方法可以定义一个类函数,该函数使用一个额外的参数来设置/获取该类的任何成员

编辑: 撇开语法错误不谈,我使用大n的理由是保留类背后的科学框架。例如,假设这个类是酶。因此,我更愿意将其属性保持在同一位置,而不是按数字索引,除非绝对必要

Set/get函数是公共的,因为它们是在设置GUI的不同类中调用的

而且,不是所有的成员都是INT。为了简单起见,我复制了Pastade。

或者:

编写一个脚本来生成方法 将所有这些整数放入一个数组中,并使用一个带有索引的get/set 编辑

除此之外,你应该

Class classname
{
    int member1;
    int member2;
    ...
    int membern;
    public:
        void setmember1(int);
        void setmember2(int);
        ...
        void setmembern(int);

        void getmember1(int);
        void getmember2(int);
        ...
        void getmembern(int);
}
编辑

考虑另外两种可能性

重载[]运算符 从std::vector继承 要么:

编写一个脚本来生成方法 将所有这些整数放入一个数组中,并使用一个带有索引的get/set 编辑

除此之外,你应该

Class classname
{
    int member1;
    int member2;
    ...
    int membern;
    public:
        void setmember1(int);
        void setmember2(int);
        ...
        void setmembern(int);

        void getmember1(int);
        void getmember2(int);
        ...
        void getmembern(int);
}
编辑

考虑另外两种可能性

重载[]运算符 从std::vector继承
在实际代码中,不应该有包含许多数据成员的类,当然也不应该有单独可设置和可获取的类

使用阵列可以实现您的要求:

int getX() const;

但是现在您的类看起来像一个集合,在这种情况下,您最好使用一个标准的库容器。

在实际代码中,您不应该有包含许多数据成员的类,当然也不应该有单独可设置和可获取的类

使用阵列可以实现您的要求:

int getX() const;

但是现在您的类看起来像一个集合,在这种情况下,您还可以使用标准的库容器。

您可以发明任何工具,使设计糟糕的类几乎可以管理。如果很难编写getter/setter,请不要这样做。你的班级一定很好

这里的一般解决方案是避免n的大值


设计要保留的类。避免。

您可以发明任何工具,使设计糟糕的类几乎易于管理。如果很难编写getter/setter,请不要这样做。你的班级一定很好

这里的一般解决方案是避免n的大值


设计要保留的类。避免了.< /p> 你用C++触碰了一个老问题,这是语言中非常有限的反射功能。如果您来自一种带有反思的语言,下面的讨论值得一看:


至于一个实用的建议,这里给出的所有答案都是完全正确的。

你用C++来触及一个古老的问题,这是语言中非常有限的反射功能。如果您来自一种带有反思的语言,下面的讨论值得一看:


至于一个实用的建议,这里给出的所有其他答案都非常有意义。

我对setter/getter不感兴趣,尽管它们在GUI等应用程序中非常常见。无论如何,我有一个通用的解决方案,它确实需要一个库,对于这个问题来说,这可能是一个过度的解决方案。假设您有以下类

class classname
{
 public:
  setMemberDangerously(size_t index, int value) { data[index] = value; }
  setMember(size_t index, int value)
  {
    if (! index < size) throw std::out_of_range("Index out of bounds");
    data[index] = value;
  }
 private:
  int data[N];
};
然后你就可以写了

 class A
 {
    char   member1;
    int    member2;
    double membern;

 public:
    void set_member1(char c)   { member1 = c; }
    void set_member2(int i)    { member2 = i; }
    void set_membern(double d) { membern = d; }

    char   get_member1() { return member1; }
    int    get_member2() { return member2; }
    double get_membern() { return membern; }
 };
也就是说,您正在使用元组。语法。。。表示一个元组;val是可能具有不同类型的值的元组,set/get是指向成员的指针的元组。运算符->*在上面给出的语法中,允许使用多个参数在单个对象上调用多个成员函数,每个函数一个参数。调用get的结果也是一个值元组

要使所有这些都起作用,您需要我目前正在开发的库。上面的语法只是一个小示例;该库更加灵活,允许为标量定义函数或运算符,然后以任意组合在元组或数组上调用它们。所有C++操作符都被重载以允许这种矢量化。运算符->*还可以处理成员指针以外的函数对象,以便调用是内联的。它还允许使用其他语法

(c, 42, 3.14)

因此,成员函数在应用于对象之前,首先使用参数绑定。成员函数可以有任意类型的参数,但在一次调用中所有函数的参数数量都应该相同。

我对setter/getter不感兴趣,尽管它们在GUI等应用程序中非常常见。无论如何,我有一个通用的解决方案,它确实需要一个库,对于这个问题来说,这可能是一个过度的解决方案。假设您有以下类

class classname
{
 public:
  setMemberDangerously(size_t index, int value) { data[index] = value; }
  setMember(size_t index, int value)
  {
    if (! index < size) throw std::out_of_range("Index out of bounds");
    data[index] = value;
  }
 private:
  int data[N];
};
然后你就可以写了

 class A
 {
    char   member1;
    int    member2;
    double membern;

 public:
    void set_member1(char c)   { member1 = c; }
    void set_member2(int i)    { member2 = i; }
    void set_membern(double d) { membern = d; }

    char   get_member1() { return member1; }
    int    get_member2() { return member2; }
    double get_membern() { return membern; }
 };
也就是说,您正在使用元组。语法。。。表示一个元组;val是可能具有不同类型的值的元组,set/get是指向成员的指针的元组。上面给出的语法中的运算符->*允许在单个ob上调用多个成员函数 具有多个参数的对象,每个函数一个参数。调用get的结果也是一个值元组

要使所有这些都起作用,您需要我目前正在开发的库。上面的语法只是一个小示例;该库更加灵活,允许为标量定义函数或运算符,然后以任意组合在元组或数组上调用它们。所有C++操作符都被重载以允许这种矢量化。运算符->*还可以处理成员指针以外的函数对象,以便调用是内联的。它还允许使用其他语法

(c, 42, 3.14)


因此,成员函数在应用于对象之前,首先使用参数绑定。成员函数可以有任意类型的参数,但是在一个调用中所有的参数都应该相同。

构造函数来设置类成员。如果有一个函数同时设置多个成员,这不是一个好主意。您可以使用成员ARAYAY是同一类型的所有成员吗?一个更好的设计是有序的。构造函数来设置类成员。有一个函数同时设置多个成员不是一个好主意。你可以使用成员ARAYAY都是同一类型的成员吗?你认为什么样的值是大的?可能是一个更好的设计正在定购中。这不是假设所有成员都是int吗?@AliAlamiri绝对是。就像OP的例子一样。@juanchopanza和未定义的行为在程序中是件好事吗/sarcasm@AliAlamiri可以是。他们没有这么说。我写这篇文章一半是开玩笑的,因为这个问题有点荒谬。我们真的不应该有一个包含无数getter和setter的类。@PeterM-One可以添加另一个版本来检查边界并在必要时抛出。或者一个人可以扔掉整个东西,首先编写合理的类:-这不是假设所有成员都是int吗?@AliAlamiri绝对是。就像OP的例子一样。@juanchopanza和未定义的行为在程序中是件好事吗/sarcasm@AliAlamiri可以是。他们没有这么说。我写这篇文章一半是开玩笑的,因为这个问题有点荒谬。我们真的不应该有一个包含无数getter和setter的类。@PeterM-One可以添加另一个版本来检查边界并在必要时抛出。或者一个人可以扔掉所有的东西,首先编写合理的类:-