专门用于另一个命名空间内的全局模板函数

时间:2016-07-14 12:03:04

标签: c++ templates

如何在仍然位于命名空间内时专门化GetData函数?

#include <iostream>

class Person
{
public:
    Person() {}
};

class Animal
{
public:
    Animal() {}
};

template<typename T>
T GetData(const std::string& data)
{
    static_assert(false, "no specialization");
    return T{};
}

template<>
Person GetData<Person>(const std::string& data)
{
    return Person();
}

namespace ns
{
    template<>
    Animal GetData<Animal>(const std::string& data)
    {
        return Animal();
    }
}

int main(int argc, char* argv[])
{
    Person p = GetData<Person>(std::string(""));
    Animal a = GetData<Animal>(std::string(""));
    std::cout << "Program Completed\n";
    getchar();
    return 0;
}

我收到错误:

  

错误C2912:显式特化&#39;动物ns :: GetData(const std :: string&amp;)&#39;不是功能模板的专业化

0 个答案:

没有答案