【发布时间】:2014-02-18 00:30:02
【问题描述】:
给定一个具有各种成员数据值和静态 int 计数器的 C++ 类,我想要一个 clear() 函数,它可以遍历这些类对象数组的所有元素,清除它们的数据成员。
因此,例如,一个看起来像这样并保存芯片版本信息的类(是的,我知道我可能需要更多的 setter 和 getter):
class __STA_version_t
{
public:
__STA_version_t() { count++; };
~__STA_version_t() {};
void setVerString( char* x ) { strncpy( verString, x, sizeof(verString)); verString[sizeof(verString)-1] = 0
void clearVerString() { memset( verString, 0x0, sizeof(verString) ); }
char* getVerString() { return verString; }
bool hasVersion() { return verString[0]; }
void clear()
{
for ( int i = 0; i < count; i++ )
{
// what goes here?
}
}
private:
static int count; // how many of these objects exist, need to know for clear().
char verString[20]; // station version as a string
UINT8 major_ver; // major version identifier (3 bits)
UINT8 minor_ver; // minor version identifier (6 bits)
UINT8 revision; // revision identifier (4 bits)
UINT8 chip_ident; // target chip identifier (3 bits)
};
因此在其他地方初始化count:
__STA_version_t::count = 0;
现在,创建一个对象数组:
__STA_version_t versions[10];
首先,检查一下,实例化后 count 应该等于 10,对吧?
在clear() 函数中,我想说的是:
this[i]->clearVerString();
this[j]->revision = 0;
// etc.
清除数组中每个元素的每个数据成员。
这可以工作吗?怎么样?
【问题讨论】:
-
只使用 std::vector 有什么问题<__sta_version_t>?
-
此外,如果您的代码不是玩具程序,静态计数很少会按照您希望的方式工作。您在程序运行期间发生了临时、复制等情况,并且该“计数”成员可能具有您没想到的值。
-
必须调查一下。指针?而且,不,它的目的是用于商业用途。