0

所以我一直试图弄清楚如何使用模板专业化,但遇到了意外的编译器错误。我检查语法越多,它看起来越正确,所以很明显我错过了一些东西。我要做的就是创建两个专门的函数模板并将它们与重载函数进行比较。我得到的错误如下:'OverloadedFunk' could not be resolved在第 28 和 35 行。这是我试图摇滚的代码:

#include <iostream>
using namespace std;

enum ErrorCode {
    ERROR_NONE = 0, ///< No errors
    SOME_FAILURE_01, 
    SOME_FAILURE_02, 
    INVALID_STATUS, 
    ERROR_UNKNOWN, 
};

template<typename _to, typename _from>
inline int OverLoadedFunk(_from const &arg, _to &dest)
{
    cout << "OverLoadedFunk3 - Template to from";
    return 0;
}

template<>
inline int OverloadedFunk(const int &from, std::string &dest) //Line 28
{
    cout << "OverloadedFunk1 - int to string";
    return 0;
}

template<>
inline int OverloadedFunk(const ErrorCode &from, std::string &dest) //Line 35
{
    cout << "OverloadedFunk2 - enumeration to string";
    return 0;
}


int main() {
    std::string localDest = "test";
    int localFrom = 1234;
    OverloadedFunk(localFrom, localDest);
    return 0;
}

我在这里到底做错了什么?我知道我可以改用重载函数,但我正在尝试测试专业化和重载函数之间的区别,这样在这种情况下对我没有帮助。非常感谢所有帮助。

4

1 回答 1

3

你的主要函数模板是命名OverLoadedFunk的,但你的特化是命名的OverloadedFunk——C++是区分大小写的!

于 2012-04-20T23:17:36.010 回答