Как мне указать инициализаторы не шаблонных аргументов по умолчанию в шаблоне функции c ++?

РЕДАКТИРОВАТЬ: Смотрите мой собственный ответ на этот вопрос для деталей. Оказывается, это ошибка Eclipse Juno, а не проблема C ++. Тем не менее, этот вопрос все еще охватывает полезную тему для других пользователей шаблонов C ++.

Если я хочу создать шаблонный класс с аргументом типа «шаблон» и другими аргументами типа «не шаблонный», могу я. Как мне это указать?

Пример: реализация или itoa (), но с несколькими типами, заполнением и возвращением строки …

РЕДАКТИРОВАТЬ: исправлены имена переменных в определении.

   template <typename T>   std::string    Num2Str( T x, char pad = ' ', int width = 0 );
template <typename T>   std::string    Num2Str( T x, char pad, int width )
{
static std::string   string;
std::stringstream    ss;
ss << std::setfill(pad) << std::setw(width) << x;
string = ss.str();
return string;
}

РЕДАКТИРОВАТЬ: Это должно работать на всех компиляторах / платформах, g ++, VC ++.

0

Решение

Я думаю, что вы смешиваете параметры шаблона и функциональные параметры. Почему не только это:

#include <sstream>
#include <iomanip>

template <typename T>
std::string Num2Str( T x, char pad = ' ', int width = 0 )
{
static std::string   string;
std::stringstream    ss;
ss << std::setfill(pad) << std::setw(width) << x;
string = ss.str();
return string;
}

void Test()
{
auto s1 = Num2Str( 1.0 );
auto s2 = Num2Str( 2, '-' );
auto s3 = Num2Str( 3.0, ' ', 3 );
}
2

Другие решения

Ну, я нашел ошибку. Абсолютно ничего общего с синтаксисом или C ++. Это ошибка в Eclipse Juno. Кажется, что индексатор не поспевает за сборкой. Перестройка индекса избавила от обеих ошибок. Project Expolrer->(projname)->Index->Rebuild, Возможно, вам сначала нужно сделать Project Expolrer->(projname)->Index->Freshen All Files, Наконец, в Problems панель, ctrl-A затем выбрать все ошибки del а также ENTER очистить журнал ошибок.

Интересный артефакт этой ошибки индексатора заключается в том, что среда IDE не всегда забывает ошибки, о которых она знала до текущей сборки. Казалось, он не мог забыть две вышеупомянутые ошибки и сообщил о них, хотя их там не было!

Я собираюсь отредактировать OP, чтобы добавить «Ecipse Juno» в качестве тега, надеясь, что это поможет кому-то из этой группы.

Спасибо за помощь!

0

По вопросам рекламы [email protected]