Hidenori Matsubayashi
2022-03-04 09:13:44 +09:00
committed by GitHub
parent 3050096d46
commit fc4efe0ac2
6 changed files with 81 additions and 30 deletions
+43 -19
View File
@@ -39,30 +39,40 @@ class CommandOptions {
CommandOptions() = default;
~CommandOptions() = default;
void AddWithoutValue(const std::string& name, const std::string& short_name,
const std::string& description, bool required) {
void AddWithoutValue(const std::string& name,
const std::string& short_name,
const std::string& description,
bool required) {
Add<std::string, ReaderString>(name, short_name, description, "",
ReaderString(), required, false);
}
void AddInt(const std::string& name, const std::string& short_name,
const std::string& description, const int& default_value,
void AddInt(const std::string& name,
const std::string& short_name,
const std::string& description,
const int& default_value,
bool required) {
Add<int, ReaderInt>(name, short_name, description, default_value,
ReaderInt(), required, true);
}
void AddString(const std::string& name, const std::string& short_name,
void AddString(const std::string& name,
const std::string& short_name,
const std::string& description,
const std::string& default_value, bool required) {
const std::string& default_value,
bool required) {
Add<std::string, ReaderString>(name, short_name, description, default_value,
ReaderString(), required, true);
}
template <typename T, typename F>
void Add(const std::string& name, const std::string& short_name,
const std::string& description, const T default_value,
F reader = F(), bool required = true, bool required_value = true) {
void Add(const std::string& name,
const std::string& short_name,
const std::string& description,
const T default_value,
F reader = F(),
bool required = true,
bool required_value = true) {
if (options_.find(name) != options_.end()) {
std::cerr << "Already registered option: " << name << std::endl;
return;
@@ -213,7 +223,7 @@ class CommandOptions {
}
size_t index_adjust = 0;
constexpr int kSpacerNum = 5;
constexpr int kSpacerNum = 10;
auto need_value = registration_order_options_[i]->IsRequiredValue();
ostream << kOptionStyleNormal
<< registration_order_options_[i]->GetName();
@@ -242,8 +252,11 @@ class CommandOptions {
class Option {
public:
Option(const std::string& name, const std::string& short_name,
const std::string& description, bool required, bool required_value)
Option(const std::string& name,
const std::string& short_name,
const std::string& description,
bool required,
bool required_value)
: name_(name),
short_name_(short_name),
description_(description),
@@ -288,9 +301,12 @@ class CommandOptions {
template <typename T>
class OptionValue : public Option {
public:
OptionValue(const std::string& name, const std::string& short_name,
const std::string& description, const T& default_value,
bool required, bool required_value)
OptionValue(const std::string& name,
const std::string& short_name,
const std::string& description,
const T& default_value,
bool required,
bool required_value)
: Option(name, short_name, description, required, required_value),
default_value_(default_value),
value_(default_value){};
@@ -316,10 +332,18 @@ class CommandOptions {
template <typename T, typename F>
class OptionValueReader : public OptionValue<T> {
public:
OptionValueReader(const std::string& name, const std::string& short_name,
const std::string& description, const T default_value,
F reader, bool required, bool required_value)
: OptionValue<T>(name, short_name, description, default_value, required,
OptionValueReader(const std::string& name,
const std::string& short_name,
const std::string& description,
const T default_value,
F reader,
bool required,
bool required_value)
: OptionValue<T>(name,
short_name,
description,
default_value,
required,
required_value),
reader_(reader) {}
~OptionValueReader() = default;