Skip to content

Instantly share code, notes, and snippets.

@poseidon4o
Created December 27, 2021 11:12
Show Gist options
  • Save poseidon4o/632546fdd39888a49a830761c0292dc1 to your computer and use it in GitHub Desktop.
Save poseidon4o/632546fdd39888a49a830761c0292dc1 to your computer and use it in GitHub Desktop.
#include <unordered_map>
struct NamedArguments {
enum class Name {
start, step, stop
};
struct BaseArg {
Name name;
NamedArguments operator=(int value) const {
NamedArguments args;
args.args[name] = value;
return args;
}
};
int get(Name n) {
return args[n];
}
std::unordered_map<Name, int> args;
};
NamedArguments merge(NamedArguments a, const NamedArguments &b) {
for (auto arg : b.args) {
a.args[arg.first] = arg.second;
}
return a;
}
namespace name{
static const NamedArguments::BaseArg start{NamedArguments::Name::start};
static const NamedArguments::BaseArg stop{NamedArguments::Name::stop};
static const NamedArguments::BaseArg step{NamedArguments::Name::step};
};
void printNumbers(NamedArguments f1, NamedArguments f2, NamedArguments f3) {
NamedArguments args = merge(merge(f1, f2), f3);
int start = args.get(NamedArguments::Name::start);
int stop = args.get(NamedArguments::Name::stop);
int step = args.get(NamedArguments::Name::step);
for (int c = start; c < stop; c += step) {
std::cout << c << ' ';
}
std::cout << std::endl;
}
int main() {
printNumbers(name::start = 0, name::stop = 10, name::step = 1);
printNumbers(name::stop = 55, name::start = 5, name::step = 5);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment