Last active
November 26, 2016 15:45
-
-
Save illescasDaniel/e016cf94081f20ec0f2a3e5b7e5504a1 to your computer and use it in GitHub Desktop.
User-defined literals [C++]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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