mirror of
https://github.com/KeqingMoe/argparse.git
synced 2025-07-04 15:14:39 +00:00
Cleanup Argument::get methods
This commit is contained in:
parent
ca68260ec4
commit
02b3ed1878
@ -182,98 +182,35 @@ public:
|
|||||||
|
|
||||||
// Getter for template types other than std::vector and std::list
|
// Getter for template types other than std::vector and std::list
|
||||||
template <typename T>
|
template <typename T>
|
||||||
typename std::enable_if<!is_specialization<T, std::vector>::value &&
|
enable_if_not_container<T>
|
||||||
!is_specialization<T, std::list>::value, T>::type
|
|
||||||
get() const {
|
get() const {
|
||||||
if (mValues.empty()) {
|
if (!mValues.empty()) {
|
||||||
if (mDefaultValue.has_value()) {
|
return std::any_cast<T>(mValues.front());
|
||||||
return std::any_cast<T>(mDefaultValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
}
|
||||||
else {
|
if (mDefaultValue.has_value()) {
|
||||||
if (!mRawValues.empty())
|
return std::any_cast<T>(mDefaultValue);
|
||||||
return std::any_cast<T>(mValues[0]);
|
|
||||||
else {
|
|
||||||
if (mDefaultValue.has_value())
|
|
||||||
return std::any_cast<T>(mDefaultValue);
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
throw std::logic_error("No value provided");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getter for std::vector. Here T = std::vector<...>
|
// Getter for container types
|
||||||
template <typename T>
|
template <typename CONTAINER>
|
||||||
typename std::enable_if<is_specialization<T, std::vector>::value, T>::type
|
enable_if_container<CONTAINER>
|
||||||
get() const {
|
get() const {
|
||||||
using ValueType = typename T::value_type;
|
using ValueType = typename CONTAINER::value_type;
|
||||||
T tResult;
|
CONTAINER tResult;
|
||||||
if (mValues.empty()) {
|
if (!mValues.empty()) {
|
||||||
if (mDefaultValue.has_value()) {
|
std::transform(std::begin(mValues), std::end(mValues),
|
||||||
T tDefaultValues = std::any_cast<T>(mDefaultValue);
|
std::back_inserter(tResult), std::any_cast<ValueType>);
|
||||||
std::transform(std::begin(tDefaultValues), std::end(tDefaultValues),
|
return tResult;
|
||||||
std::back_inserter(tResult), std::any_cast<ValueType>);
|
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
}
|
||||||
else {
|
if (mDefaultValue.has_value()) {
|
||||||
if (!mRawValues.empty()) {
|
const auto& tDefaultValues = std::any_cast<const CONTAINER&>(mDefaultValue);
|
||||||
for (const auto& mValue : mValues) {
|
std::transform(std::begin(tDefaultValues), std::end(tDefaultValues),
|
||||||
tResult.emplace_back(std::any_cast<ValueType>(mValue));
|
std::back_inserter(tResult), std::any_cast<ValueType>);
|
||||||
}
|
return tResult;
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (mDefaultValue.has_value()) {
|
|
||||||
auto tDefaultValues = std::any_cast<std::vector<T>>(mDefaultValue);
|
|
||||||
std::transform(std::begin(tDefaultValues), std::end(tDefaultValues),
|
|
||||||
std::back_inserter(tResult), std::any_cast<ValueType>);
|
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Getter for std::list. Here T = std::list<...>
|
|
||||||
template <typename T>
|
|
||||||
typename std::enable_if<is_specialization<T, std::list>::value, T>::type
|
|
||||||
get() const {
|
|
||||||
using ValueType = typename T::value_type;
|
|
||||||
T tResult;
|
|
||||||
if (mValues.empty()) {
|
|
||||||
if (mDefaultValue.has_value()) {
|
|
||||||
T tDefaultValues = std::any_cast<T>(mDefaultValue);
|
|
||||||
std::transform(std::begin(tDefaultValues), std::end(tDefaultValues),
|
|
||||||
std::back_inserter(tResult), std::any_cast<ValueType>);
|
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (!mRawValues.empty()) {
|
|
||||||
for (const auto& mValue : mValues) {
|
|
||||||
tResult.emplace_back(std::any_cast<ValueType>(mValue));
|
|
||||||
}
|
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (mDefaultValue.has_value()) {
|
|
||||||
auto tDefaultValues = std::any_cast<std::list<T>>(mDefaultValue);
|
|
||||||
std::transform(std::begin(tDefaultValues), std::end(tDefaultValues),
|
|
||||||
std::back_inserter(tResult), std::any_cast<ValueType>);
|
|
||||||
return tResult;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
throw std::logic_error("No value provided");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> mNames;
|
std::vector<std::string> mNames;
|
||||||
|
Loading…
Reference in New Issue
Block a user