检查构造函数中的类成员数

时间:2012-07-17 14:14:36

标签: c++ class assert

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

我实现了一个简单的解决方案,它涉及计算类声明中的所有成员,然后设置一个带有该值的#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)
}

大!每当我忘记添加一些东西时,我就会得到一个断言和违规的地方!

好的,这有效......但是,有更优雅的方式做这样的事吗?

干杯

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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