gpt4 book ai didi

c++ - 类型安全枚举和作用域辅助函数

转载 作者:行者123 更新时间:2023-11-30 01:21:43 25 4
gpt4 key购买 nike

在使用枚举时,我通常会有一些与之关联的辅助方法。对于 C 风格的枚举,我通常这样做:

namespace Colour {
enum Enum { RED, BLUE, GREEN };
string to_string(Enum);
Enum from_string(string const&);
}

C++11 枚举类强制您使用烦人的前缀:

enum class Colour { RED, BLUE, GREEN };
string colour_to_string(Enum);
Enum colour_to_string(string const&);

使用类似命名空间的范围来获得类型安全的选项有哪些?

最佳答案

这是要走的路:

#include <string>
#include <iostream>

enum class Colors{ RED, BLUE, GREEN };

struct myRedStruct{
bool operator==(const Colors& c)const{
if(c == Colors::RED)
return true;
return false;
}
};

namespace ColorsUtils {
using namespace std;

template <typename ColorComparable>
string to_string(const ColorComparable& c){
if(c == Colors::RED)
return "red";
return "not red";
}
Colors from_string(string const&);
}

int main() {
Colors c = Colors::BLUE;
const auto& s = ColorsUtils::to_string(c);
std::cout << s << std::endl;

myRedStruct mrs;
const auto & s2 = ColorsUtils::to_string(mrs);
std::cout << s2 << std::endl;
}

这与您对任何其他用户定义类型所做的几乎相同。试试上面的代码 here .请注意,在该示例中,您可以将任何相等的可比较类型“转换”为字符串。

关于c++ - 类型安全枚举和作用域辅助函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17738121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com