Advertisement
zhangsongcui

Reverse number in compile time using user-defined literal

Nov 14th, 2011
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <char c, char... Str>
  4. struct reverse_int
  5. {
  6.     static const int value = 10 * reverse_int<Str...>::value + (c - '0');
  7. };
  8.  
  9. template <char c>
  10. struct reverse_int<c>
  11. {
  12.     static const int value = c - '0';
  13. };
  14.  
  15. template <char... Str>
  16. constexpr int operator "" _reverse()
  17. {
  18.     return reverse_int<Str...>::value;
  19. }
  20.  
  21. template <int Num, int temp = 0>
  22. struct reverse_int2
  23. {
  24.     static const int value = reverse_int2<Num / 10, temp * 10 + Num % 10>::value;
  25. };
  26.  
  27. template <int temp>
  28. struct reverse_int2<0, temp>
  29. {
  30.     static const int value = temp;
  31. };
  32.  
  33. int main(int argc, char *argv[])
  34. {
  35.     using namespace std;
  36.     cout << 54321_reverse << endl
  37.           << reverse_int2<12345>::value << endl;
  38. }
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement