struct OptionDeclaration<'a, T> {
parser: &'a mut ArgumentParser,
long_names: Vec<&'static str>,
short_names: Vec<&'static str>,
help_text: &'static str,
_phantom: std::marker::PhantomData<T>,
}
みたいに核となる構造体を持って
struct NoParam;
struct WithParam;
struct WithOptionalParam;
を型パラメーターにしてそれぞれの処理をimplする
→ パラメーターの有無によらず統一したインターフェースでオプションを宣言可能