4

我是模板新手。我尝试为函数模板定义专门的模板,但我的编译器返回错误。它是简单的 max 函数,只是为了练习模板而编写的;这是代码:

template <typename TYP1, typename TYP2> TYP1 maximum(TYP1& param1, TYP2& param2)
{
    return (param1 > param2 ? param1 : param2);
}

和专门的功能:

template<> std::string maximum<std::string, std::string>(std::string prm1, std::string prm2)
{
    std::cout << "Inside specialized functiion\n";
    return (prm1.length() > prm2.length() ? prm1 : prm2);
}

如果我尝试为 std::string 或任何其他类型(包括我自己定义的类)编写专门化并不重要 - 错误总是相同的:

“错误 C2912:显式特化;‘std::string maximum(std::string,std::string)’不是函数模板的特化……”

IntelliSense 提示:“没有函数模板的实例”

我应该改变什么才能使这个编译和正常工作?

提前致谢

4

2 回答 2

10

你忘记了&前面的字符串。它需要引用类型,您的“专业化”正在使用值类型。

template<> std::string maximum<std::string, std::string>(std::string &prm1, std::string &prm2)
于 2010-11-20T15:42:08.997 回答
3

它不是专业化的,因为主模板需要TYP1&TYP2&参数。您可以使用以下方法修复您的代码:

template<> std::string maximum<std::string, std::string>(std::string &prm1, std::string &prm2)
{
    std::cout << "Inside specialized functiion\n";
    return (prm1.length() > prm2.length() ? prm1 : prm2);
}

请注意,参数是通过引用获取的。

于 2010-11-20T15:44:29.873 回答