0

编辑:有关详细信息,请参阅我自己对这个问题的回答。结果证明是 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++。

4

2 回答 2

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 );
}
于 2013-05-01T23:03:15.880 回答
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”作为标签,希望它能帮助该组的某个人。

感谢所有的帮助!

于 2013-05-02T15:13:48.113 回答