Re[3]: Int to string compile time.
От: rg45 СССР  
Дата: 24.12.09 13:55
Оценка: 9 (2)
Здравствуйте, ankorol, Вы писали:

A>Здравствуйте, rg45, Вы писали:


R>>Не получится потому, что директивы #pragma обрабатываются еще до компиляции препроцессором.


A>Ваша правда, так не получится, а если чисто теоретически такое преобразование можно сделать?


Упрощенно, для иллюстрации идеи, ниже показано как это можно реализовать. Если сделать еще пару-тройку танцевальных движений с бубном, то можно обобщить реализацию на целочисленный тип произвольного размера и убрать не значашие нули в начале строки.
template<int N> struct Exp10 { enum { value = Exp10<N-1>::value * 10 }; };
template<> struct Exp10<0> { enum { value = 1 }; };

template<int N, int Pos>
struct SymbolAt 
{ 
  static const char value = N / Exp10<Pos>::value % 10 + '0';
};

template<int N>
struct IntToString
{
  static const char value[];
};

template<int N>
const char IntToString<N>::value[] = 
{ 
  SymbolAt<N,9>::value,
  SymbolAt<N,8>::value,
  SymbolAt<N,7>::value,
  SymbolAt<N,6>::value,
  SymbolAt<N,5>::value,
  SymbolAt<N,4>::value,
  SymbolAt<N,3>::value,
  SymbolAt<N,2>::value,
  SymbolAt<N,1>::value,
  SymbolAt<N,0>::value,
};

//Использование:
#include <iostream>
int main()
{
  std::cout << IntToString<123>::value << std::endl;
}
--
Не можешь достичь желаемого — пожелай достигнутого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.