enum StatusLevel{
Success = 0,
Info,
Warning,
Error,
};
struct Status{
virtual void operator() () { logd(statusInfo); };
template <typename T>
bool isStatus(){
return statusCode == GetTypeHash<T>();
}
size_t statusCode;
int statusLevel;
std::string statusInfo{"default"};
};
struct StatusSuccess:public Status{
StatusSuccess(){
statusInfo = "Success";
statusLevel = StatusLevel::Success;
statusCode = GetTypeHash<StatusSuccess>();
}
};
struct StatusInfo:public Status{
StatusInfo(std::string information){
statusInfo = information;
statusLevel = StatusLevel::Info;
statusCode = GetTypeHash<StatusInfo>();
}
};
struct StatusWarning:public Status{
StatusWarning(std::string warningMsg){
statusInfo = warningMsg;
statusLevel = StatusLevel::Warning;
statusCode = GetTypeHash<StatusWarning>();
}
};
struct StatusError:public Status{
StatusError(std::string errorMsg){
statusInfo = errorMsg;
statusLevel = StatusLevel::Error;
statusCode = GetTypeHash<StatusError>();
}
};
template <typename T>
class StatusOrValue{
StatusOrValue(T& _value){
value = std::move(_value);
isValue = true;
}
StatusOrValue(Status& _status){
status = std::move(_status);
isValue = false;
}
T& get(std::enable_if<isValue>::type* = 0){
return value;
}
T& get(std::enable_if<!isValue>::type* = 0){
return status;
}
private:
bool isValue;
T value;
Status status;
};
C++ 状态(机)实现练习
最新推荐文章于 2023-09-04 17:01:36 发布