如何在c ++函数模板中指定默认的非模板参数初始值设定项?

时间:2013-05-01 22:55:29

标签: c++ templates eclipse-juno

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

2 个答案:

答案 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选择所有错误,然后delENTER清除错误日志。

这个索引器错误的有趣工件是IDE在当前构建之前并不总是忘记它知道的错误。它似乎无法忘记前面提到的两个错误并报告它们,即使它们不在那里!

我要编辑OP以添加“Ecipse Juno”作为标签,希望它能帮助该组中的某个人。

感谢您的帮助!