1

我正在编写一个不断添加新成员的类(它是项目的原型),并且我已经实现了自己的构造函数、复制构造函数、复制运算符等......当我添加更多成员时,我必须提醒自己继续将它们添加到构造函数和运算符中,我想知道是否有一种自动方法来检查我是否包含所有内容。

我实现了一个简单的解决方案,该解决方案涉及计算类声明中的所有成员,然后使用该值设置#define。

Class A
{
   int a;
   int b;
   vector<int> c;
   /*3 members*/
}

#define CLASS_A_MEMBERS 3

在构造函数中,我只是做这样的事情

A::A( )
{
   int counter=0;
   a=1; counter++;
   b=1; counter++;
   c.clear(); counter++;

   assert(counter==CLASS_A_MEMBERS)
}

伟大的!每当我忘记添加一些东西时,我都会得到一个断言和有问题的地方!

好的,这行得通......但是,有没有更优雅的方式来做这样的事情?

干杯

4

2 回答 2

3

不要以这种方式解决你的根本问题。相反,通过使您的课程不可复制或微不足道(默认)复制/分配来解决它。如果您的所有资源都由 RAII 原则管理,那么您可以让编译器为您生成所有特殊的构造函数/运算符,无论您对类做什么,它都会正确生成它们。

于 2012-07-17T14:19:51.837 回答
0

您的代码仍然需要您记住更新CLASS_A_MEMBERS,并添加counter++到您的初始化程序和复制构造函数。

更好的解决方案是编写单元测试,这是一个更强大的解决方案,因为您可以使用它来测试各种行为。

没有办法自动解决这个问题。当你向一个类添加一个成员时,你必须访问所有的构造函数等等,以确保它们是正确的。文本搜索可以找到最后一个成员提到的所有地方,这将很好地提醒您添加新成员时可能需要触摸的所有地方。

于 2012-07-17T14:19:03.647 回答