Создание шаблона метода - C ++ - PullRequest
0 голосов
/ 06 февраля 2009

Код ниже используется для получения представления std :: string из кода ASCII.

string Helpers::GetStringFromASCII(const int asciiCode) const
{
    return string(1,char(asciiCode));
}

Хорошо работает. Но в моем приложении я знаю коды ASCII во время компиляции. Поэтому я буду называть это как

string str =  GetStringFromASCII(175) // I know 175 at compile time

Вопрос

Есть ли способ сделать метод GetStringFromASCII шаблоном, чтобы обработка происходила во время компиляции, и я могу избежать вызова функции каждый раз во время выполнения.

Есть мысли?

Ответы [ 4 ]

4 голосов
/ 06 февраля 2009

Этот тип шаблонного метапрограммирования хорошо работает, когда вы имеете дело с примитивными типами данных, такими как int s и float s. Если вам обязательно нужен строковый объект, вы не можете избежать вызова конструктора std::string, и этот вызов не может произойти во время компиляции. Кроме того, я не думаю, что вы также можете перетащить приведение к char, чтобы компилировать время, что в целом означает, что шаблоны здесь вам не помогут.

3 голосов
/ 06 февраля 2009

Вместо подачи константы int в функцию преобразования строк, используйте строковую константу напрямую:

string str("\xAF"); // 0xAF = 175

Между прочим, за исключением высоких требований к производительности в цикле, удобочитаемость торгового кода для некоторых циклов ЦП в целом редко приносит деньги.

0 голосов
/ 07 февраля 2009

Почему вы вообще беспокоитесь о вспомогательной функции?

string s( 1, char(175) ); 

Это все, что вам нужно, и это самое быстрое, что вы получите.

0 голосов
/ 06 февраля 2009

Как насчет этого:

#include <iostream>
#include <string>

using namespace std;

template <int asciiCode>
inline string const &getStringFromASCII()
{
  static string s(1,char(asciiCode));
  return s;
}

int main(int, char const**) {
  cout << getStringFromASCII<65>() << endl;
}

РЕДАКТИРОВАТЬ : возвращает ссылку сейчас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...