Skip to content

Instantly share code, notes, and snippets.

@illescasDaniel
Last active November 26, 2016 15:45
Show Gist options
  • Select an option

  • Save illescasDaniel/e016cf94081f20ec0f2a3e5b7e5504a1 to your computer and use it in GitHub Desktop.

Select an option

Save illescasDaniel/e016cf94081f20ec0f2a3e5b7e5504a1 to your computer and use it in GitHub Desktop.
User-defined literals [C++]
#include <iostream>
#include <string>
using namespace std;
auto operator "" _x2(unsigned long long number) {
return number * 2;
}
string operator "" _upper(char const * str, size_t size) {
string output = str;
transform(output.begin(), output.end(), output.begin(), ::toupper);
return output;
}
string operator "" _lower(char const * str, size_t size) {
string output = str;
transform(output.begin(), output.end(), output.begin(), ::tolower);
return output;
}
// Metric system conversion
auto operator "" _km(uint64_t km) { return km * 1000.0; }
auto operator "" _hm(uint64_t hm) { return hm * 100.0; }
auto operator "" _dam(uint64_t dam) { return dam * 10.0; }
auto operator "" _m(uint64_t meters) { return meters; }
auto operator "" _dm(uint64_t dm) { return dm / 10.0; }
auto operator "" _cm(uint64_t cm) { return cm / 100.0; }
auto operator "" _mm(uint64_t mm) { return mm / 1000.0; }
auto operator "" _km(long double km) { return km * 1000.0; }
auto operator "" _hm(long double hm) { return hm * 100.0; }
auto operator "" _dam(long double dam) { return dam * 10.0; }
auto operator "" _m(long double meters) { return meters; }
auto operator "" _dm(long double dm) { return dm / 10.0; }
auto operator "" _cm(long double cm) { return cm / 100.0; }
auto operator "" _mm(long double mm) { return mm / 1000.0; }
long double km(const long double& metres) { return metres / 1000.0; }
long double hm(const long double& metres) { return metres / 100.0; }
long double dam(const long double& metres) { return metres / 10.0; }
long double m(const long double& metres) { return metres; }
long double dm(const long double& metres) { return metres * 10.0; }
long double cm(const long double& metres) { return metres * 100.0; }
long double mm(const long double& metres) { return metres * 1000.0; }
int main(int argc, char *argv[]) {
cout << 10_x2 << endl;
cout << "hello"_upper << endl;
cout << "How are you"_upper << endl;
cout << "THIS IS SPARTA!"_lower << endl;
cout << 10_km << " m" << endl;
cout << 1_km + 1_m + 1_cm << " m" << endl;
cout << km(1_km + 1_m + 1_cm) << " km" << endl;
cout << cm(1_km + 10_m) << " cm" << endl;
cout << km(1_cm) << " km" << endl;
cout << km(100_hm) << " km" << endl;
cout << m(100_km) << " m" << endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment