Мне нужно выполнить проверку типов на предмет того, может ли тип варианта содержать тип во время компиляции.
Я преобразую перечисление и строку в вариант, но я хочу, чтобы библиотека была совместима спредоставленный пользователем вариант (для поддерживаемых типов).Поэтому у меня есть параметр шаблона CustomVariant
для представления варианта над подмножеством поддерживаемых типов AlphaBeta
, Gamma
, Delta
и Epsilon
.Я хотел бы вернуть std::nullopt
, если не могу создать правильный вариант.
template <typename CustomVariant>
std::optional<CustomVariant> AsCustomVariant(LargeEnum type, const std::string& name) {
case LargeEnum::ALPHA:
case LargeEnum::BETA:
return ConvertAlphaBeta(name);
case LargeEnum::GAMMA:
return ConvertGamma(name);
case LargeEnum::DELTA:
return ConvertDelta(name);
case LargeEnum::EPSILON:
return ConvertEpsilon(name);
default:
return std::nullopt;
}
Идея состоит в том, чтобы использовать какую-то магию шаблонов, которая может сделать что-то вроде:
if (std::type_can_convert<CustomVariant, Gamma>) {
return ConvertGamma(name);
} else {
return std::nullopt;
}