c++ - 不能明确特化

标签 c++ templates template-specialization

我收到这个错误:

Severity Code Description Project File Line Suppression State Error C2910 'addingStuff::addingStuffFunc': cannot be explicitly specialized BuckysTemplateSpecialization c:\users\amanuel\documents\visual studio 2015\projects\buckystemplatespecialization\buckystemplatespecializ

当我尝试运行这段代码时:

#include<iostream>
#include<string>

template<class F, class S>
class addingStuff {
public:
    addingStuff(F fCons, S sCons) : f(fCons), s(sCons){}

    F addingStuffFunc();

private:
    F f; S s;
};

template<class F, class S>
F addingStuff<F, S>::addingStuffFunc() {
    return(f + s);
}

template<>
class addingStuff<std::string , std::string>{
public:
    addingStuff(std::string sConst, std::string s2Const):s(sConst), s2(s2Const){}   
    std::string addingStuffFunc();
private:
    std::string s, s2;
};

template<>
std::string addingStuff<std::string, std::string>::addingStuffFunc() {
    return "Sorry.. Adding strings is Illegal!!";
}

int main() {
    addingStuff<std::string, std::string> exampleStuff("Hello " , "World");
    std::cout << exampleStuff.addingStuffFunc() << std::endl;
}

不知道为什么..

最佳答案

你只想:

std::string addingStuff<std::string, std::string>::addingStuffFunc() {
    return "Sorry.. Adding strings is Illegal!!";
}

额外的template <>被解释为成员函数的模板 ID,代码被解释为它对 <> 的显式特化。 .但是addingStuffFunc不是函数模板,因此出错。

关于c++ - 不能明确特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871037/

相关文章:

c++ - 我如何对两个参数使用偏特化

C++ 没有来自 popen 的输出

ios - 在 Xcode 中创建自定义模板 - 如何根据复选框创建所需的选项?

c++ - 模板的非静态成员可以专用于数据或函数吗?

c++ - 模板函数的返回类型

c++ - 在 C++ 中产生 typename 和 typedef 相关错误的模板类?

c++ - 如何让 VS Code 在调试时不打开终端?

c++ - 重载运算符 * 和 ->

c++ - 是否可以在专门的模板类中访问非类型模板参数的值?