循环向量,使用枚举检查输出并打印枚举名称

时间:2018-01-14 22:54:47

标签: c++ function enums

我有以下函数循环遍历向量并获取公共成员函数的输出。此输出是常数,如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)。

1 个答案:

答案 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