【问题标题】:Cannot be explicitly specialized不能显式特化
【发布时间】:2016-04-26 16:48:37
【问题描述】:

我收到此错误:

严重性代码描述项目文件行抑制状态 错误 C2910 'addingStuff::addingStuffFunc': 不能明确 专门的 BuckysTemplateSpecialization c:\users\amanuel\documents\visual 工作室 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;
}

不知道为什么..

【问题讨论】:

    标签: c++ templates template-specialization


    【解决方案1】:

    你只想:

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

    额外的template &lt;&gt; 被解释为成员函数的模板ID,而代码被解释为&lt;&gt; 的显式特化。但是addingStuffFunc 不是函数模板,因此会出现错误。

    【讨论】:

    • 非常感谢它的工作!我会在 5 分钟(最短时间)内接受答案。但还有一个问题!为什么我为第一个函数做 template ,而我只为第二个函数做它?是因为它实际上专门针对特定的数据类型吗?谢谢你
    • @Dsafds 差不多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多