我正在用C++开发一个库,其中users/programmer将扩展一个BaseClass具有方法的类initArray.这个方法应该由用户/程序员实现,它通常应该初始化数组的所有元素m_arr.
这是一个snipplet,修改为这个例子:
class BaseClass {
public:
BaseClass(int n) {
m_arr = new double[n];
size = n;
};
virtual ~BaseClass();
int size;
double* m_arr;
virtual int initArray();
};
Run Code Online (Sandbox Code Playgroud)
有时,用户/程序员实现了一个initArray不初始化m_arr的某些元素的东西.我想要的是在我的库中创建一个函数来检查是否initArray初始化了所有元素m_arr.该函数应在运行时由健全性检查rutine调用.
我的问题:是否有可能检测到此阵列的变化?我只能想到用一些无效值(如NaN或Inf)初始化数组,调用initArray并检查所有值是否已更改.
谢谢你的想法,
大卫
编辑
以下是我尝试检测的客户端代码示例:
// .h:
class MyExample : public BaseClass {
public:
MyExample();
virtual ~MyExample();
virtual int initArray();
};
// .cpp:
MyExample::MyExample() : BaseClass(3) { }
MyExample::~MyExample() { }
int MyExample::initArray() {
m_arr[0] = 10;
//m_arr[1] = 11; // let's say someone forgot this line
m_arr[2] = 12;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,通过忘记m_arr[1]此元素未初始化并可能在将来的计算中导致问题.这就是我想要检查的内容.
我没有看到在 C++ 中执行此操作的直接方法。您打算在 Ruby on Rails 中实现过滤器,在访问任何方法之前,都会调用过滤器。
或者,您可以将数组包装在一个结构内,并在该结构内重载 [] 运算符以进行赋值和访问。
现在 :
1) 在用于赋值的重载 [] 运算符内,维护一个计数器并为每次初始化递增计数器。
2) 在重载的 [] 访问运算符内,在访问数组内容之前检查计数器是否等于元素总数。如果没有,则抛出错误。
希望这可以帮助。