РЕДАКТИРОВАТЬ: Смотрите мой собственный ответ на этот вопрос для деталей. Оказывается, это ошибка 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 ++.
Я думаю, что вы смешиваете параметры шаблона и функциональные параметры. Почему не только это:
#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 );
}
Ну, я нашел ошибку. Абсолютно ничего общего с синтаксисом или C ++. Это ошибка в Eclipse Juno. Кажется, что индексатор не поспевает за сборкой. Перестройка индекса избавила от обеих ошибок. Project Expolrer->(projname)->Index->Rebuild
, Возможно, вам сначала нужно сделать Project Expolrer->(projname)->Index->Freshen All Files
, Наконец, в Problems
панель, ctrl-A
затем выбрать все ошибки del
а также ENTER
очистить журнал ошибок.
Интересный артефакт этой ошибки индексатора заключается в том, что среда IDE не всегда забывает ошибки, о которых она знала до текущей сборки. Казалось, он не мог забыть две вышеупомянутые ошибки и сообщил о них, хотя их там не было!
Я собираюсь отредактировать OP, чтобы добавить «Ecipse Juno» в качестве тега, надеясь, что это поможет кому-то из этой группы.
Спасибо за помощь!