#include <iostream>
enum class TestEnum
{
DEL1,
DEL2
};
class Archive
{
public:
template <typename T>
Archive& operator<<(T value)
{
return writeValues(value, std::conditional_t<std::is_enum<T>::value,
std::true_type,
std::false_type>());
}
template <typename T>
Archive& writeValues(T value, std::true_type)
{
using underlying_type = typename std::underlying_type<T>::type;
auto valueTemp = static_cast<underlying_type>(value);
return operator << (valueTemp);
}
template <typename T>
Archive& writeValues(T value, std::false_type)
{
return operator << (value);
}
Archive& operator << (int enumValue)
{
std::cout << enumValue << std::endl;
return *this;
}
Archive& operator << (double dbValue)
{
std::cout << dbValue << std::endl;
return *this;
}
};
int main()
{
TestEnum enum1 = TestEnum::DEL2;
Archive av;
av << enum1;
double teset = 2.0;
av << teset;
return 0;
}
c++模板元编程,重载运算符时,如何友好处理枚举类型
于 2023-08-09 11:21:55 首次发布