Factor out any_cast_container

This commit is contained in:
Zhihao Yuan 2019-11-17 20:05:25 -06:00
parent 3177f544f5
commit 93ddf85a7b
No known key found for this signature in database
GPG Key ID: A2E474BDAA37E11C

View File

@ -341,12 +341,7 @@ private:
template <typename CONTAINER> template <typename CONTAINER>
details::enable_if_container<CONTAINER> get() const { details::enable_if_container<CONTAINER> get() const {
if (!mValues.empty()) { if (!mValues.empty()) {
using ValueType = typename CONTAINER::value_type; return any_cast_container<CONTAINER>(mValues);
CONTAINER tResult;
std::transform(
std::begin(mValues), std::end(mValues), std::back_inserter(tResult),
[](const auto &value) { return std::any_cast<ValueType>(value); });
return tResult;
} }
if (mDefaultValue.has_value()) { if (mDefaultValue.has_value()) {
return std::any_cast<CONTAINER>(mDefaultValue); return std::any_cast<CONTAINER>(mDefaultValue);
@ -354,6 +349,17 @@ private:
throw std::logic_error("No value provided"); throw std::logic_error("No value provided");
} }
template <typename T>
static auto any_cast_container(const std::vector<std::any> &aOperand) -> T {
using ValueType = typename T::value_type;
T tResult;
std::transform(
begin(aOperand), end(aOperand), std::back_inserter(tResult),
[](const auto &value) { return std::any_cast<ValueType>(value); });
return tResult;
}
std::vector<std::string> mNames; std::vector<std::string> mNames;
std::string mUsedName; std::string mUsedName;
std::string mHelp; std::string mHelp;