模板成员函数部分实例化编译错误

时间:2018-02-16 08:57:11

标签: c++ templates

在使用MSVC编译期间出现以下错误。主要思想是根据类型的大小来专门化功能栏。如何解决这个问题?我更喜欢模板不切换的解决方案(sizeof(T))

struct S
{

    template<typename T>
    void foo(T t)
    {
        bar<sizeof(T), T>();
    }

    template<int Size, typename T>
    void bar(T t)
    {

    }

    template<typename T>  // : error C2768: 'S::bar' : illegal use of explicit template arguments
    void bar<1, T>()
    {

    }

};

完全专业化的模板

 struct S
{

    template<typename T>
    void foo(T t)
    {
        bar<sizeof(T)>();
    }

    template<int Size>
    void bar()
    {

    }

    template<>  // Works !!!
    void bar<1>()
    {

    }

};

0 个答案:

没有答案