【问题标题】:Templated Functions.. ERROR: template-id does not match any template declaration模板化函数.. 错误:模板 ID 与任何模板声明都不匹配
【发布时间】:2011-04-25 11:56:06
【问题描述】:

我已经编写了一个函数模板一个明确专门化的模板化函数,它们只接受 3 个参数并计算其中最大的一个并打印出来。

专用函数导致错误,而模板工作正常。 但我想使用 char* 类型

这是我得到的错误=> error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration

以下是我的代码:

    template <typename T>
    void Max(T& a,T& b,T& c)
    {
            if(a > b && a >> c)
            {
                    cout << "Max: " << a << endl;
            }
            else if(b > c && b > a)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << c << endl;
            }
    }

    template <>
    void Max(char* a,char* b,char* c)
    {
            if(strcmp(a,b) > 0 )
            {
                    cout << "Max: " << a << endl;
            }
            else if(strcmp(b,c) > 0)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << b << endl;
            }
}

【问题讨论】:

  • 先把原签名做好。模板 void Max(T&a,T&b,T&c)
  • 在我的情况下,这是由于将 const 添加到返回类型规范,从而导致与主模板函数不匹配。

标签: c++ generics strcmp function-templates


【解决方案1】:

您需要通过引用获取指针:

template <> 
void Max(char*& a,char*& b,char*& c) 

也就是说,最好使用显式特化,而只是重载函数:

void Max(char* a, char* b, char* c)

专门化函数模板几乎总是一个坏主意。有关更多信息,请参阅 Herb Sutter 的 "Why Not Specialize Function Templates?"

【讨论】:

    【解决方案2】:

    我遇到了同样的问题并使用 typedef 修复了它:

    typedef char * charPtr;
    template <>
    void Max(charPtr &a, charPtr &b, charPtr &c)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多