Nest模板类方法专业化

时间:2017-09-28 12:34:16

标签: c++ c++11 template-specialization

UPD :为什么它不与(Syntax for specialization of nested template class)重复 - 提供的答案要求我完全覆盖特化类。在我的情况下,我只需要专门的单一方法

在我提出问题之前,我发布了有效的绝对正确代码:

template <class T>
struct Gen
{
    void method()
    {
        std::cout << "I'm generic method\n";
    }
};

template <>
void Gen<int>::method()
{
    std::cout << "I'm dedicated for int method\n";
}

int main()
{
    Gen<float> g1;
    g1.method(); //generic method

    Gen<int> g2;
    g2.method(); //int method

}

因此,这声明了模板类的方法,它具有int的特殊行为。

现在我尝试使用嵌套模板类完全相同:

template <class T>
struct GenNest
{
    template <class R>
    struct Nest
    {
        void method()
        {
            std::cout << "I'm generic method\n";
        }
    };
};

template <class T>
template <>
void GenNest<T>::Nest<int>::method()
{
    std::cout << "I'm dedicated for int method\n";
}

int main()
{
    GenNest<float>::Nest<float> n1;
    n1.method(); //generic method
}

这种情况在编译时失败

  • for vc ++:error C2995:&#39; void GenNest :: Nest :: method(void)&#39; :已定义功能模板
  • 表示g ++错误:&#39;&gt;&#39;之前的显式专业化无效令牌

亲爱的社区 - 出了什么问题以及如何解决它?

0 个答案:

没有答案