我有以下函数循环遍历向量并获取公共成员函数的输出。此输出是常数,如1,8或3等。
void testItems(const TestObjectList* const testObject) {
std::vector<ObjectTestFirst> testobjects = testObject->getTestObjects();
std::vector<ObjectTestFirst>::iterator itr;
std::stringstream strbuffer;
for (itr = testobjects.begin(); itr != testobjects.end(); itr++){
strbuffer << tc.toString(itr->getTimest()) << ",\t"
<< itr->getObjectTest1() << ",\t"
<< itr->getObjectTest2() << ",\t"
<< itr->getObjectTest3() << ",\t"
<< std::endl;
}
outfile << strbuffer.str() << std::endl;
}
我在头文件中定义了这些常量,我导入(hpp)表示为enum
:
enum TestObjectClass {
TestObjectClass_Zero = 0,
TestObjectClass_TestApple = 1,
TestObjectClass_TestOrange = 8,
TestObjectClass_TestBanana = 3,
};
在我展示的第一个代码段中,testItems
函数,如何使用enum
检查公共成员函数的输出并打印enum
名称?
示例: itr->getObjectTest1() << ",\t"
输出8 - 然后检查枚举,它与TestObjectClass_TestOrange = 8匹配,因此我打印出TestObjectClass_TestOrange而不是常量(8)。
答案 0 :(得分:1)
不幸的是,由于C ++ 11中没有通用的枚举到字符串函数(也许C ++ 17最终会解决这个问题?),你必须自己动手。
std::ostream& operator<< (std::ostream& os, TestObjectClass objClass)
{
switch (objClass)
{
case TestObjectClass::Zero: return os << "Zero" ;
case TestObjectClass::TestApple: return os << "TestApple";
case TestObjectClass::TestOrange: return os << "TestOrange";
case TestObjectClass::TestBanana: return os << "TestBanana";
// omit default case to trigger compiler warning for missing cases
}
return os << static_cast<uint16_t>(objClass);
}
然后,您可以创建此重载的ostream运算符以获得所需的行为。
tibble