我有一個創建了一系列通過我的應用程序與相關聯的打印語句中使用枚舉的命名空間,像這樣模板化流運算符:打印枚舉
namespace NS {
enum EnumA { A1, A2, A3 };
enum EnumB { B1, B2, B3 };
inline std::string toString(const EnumA key) {
switch(key) {
case A1: return "A1";
case A2: return "A2";
case A3: return "A3";
}
return "UNKNOWN";
}
// .. same for EnumB
}
// this is the part I would like to templatize
inline std::ostream& operator<<(std::ostream& s, const NS::EnumA key) {
s << NS::toString(key);
return s;
}
inline std::ostream& operator<<(std::ostream& s, const NS::EnumB key) {
s << NS::toString(key);
return s;
}
是否有可能模板化的流運算符與任何合作NS
枚舉,所以我只需要有一個?像:
template <typename T>
inline std::ostream& operator<<(std::ostream& s, const NS::<T> key) {
s << NS::toString(key);
return s;
}
我不知道這是如何工作的,但它確實如此,特別是因爲直接打印到流中不起作用(即使它在名稱空間中)。 – steveo225