编辑:有关详细信息,请参阅我自己对此问题的回答。事实证明这是一个Eclipse Juno错误,而不是C ++问题。尽管如此,这个问题仍然涵盖了其他C ++模板用户的一个有用主题。
如果我希望创建一个模板类,其参数为“template”类型,其他参数为“non-temlate”类型,我可以指定吗?
示例:一个实现或itoa()但有多种类型,填充并返回一个字符串......
编辑:修改定义中的var名称。
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 :(得分:2)
我认为你正在混合模板参数和函数参数。为什么不呢:
#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 );
}
答案 1 :(得分:0)
好吧,我发现了这个错误。语法或C ++绝对没有。这是Eclipse Juno中的一个错误。索引器似乎跟不上构建。重建索引摆脱了两个错误。 Project Expolrer->(projname)->Index->Rebuild
。您可能首先需要Project Expolrer->(projname)->Index->Freshen All Files
。最后,在Problems
窗格中,ctrl-A
选择所有错误,然后del
和ENTER
清除错误日志。
这个索引器错误的有趣工件是IDE在当前构建之前并不总是忘记它知道的错误。它似乎无法忘记前面提到的两个错误并报告它们,即使它们不在那里!
我要编辑OP以添加“Ecipse Juno”作为标签,希望它能帮助该组中的某个人。
感谢您的帮助!