嵌套类模板完全专业化与部分专业化

时间:2015-11-06 18:26:53

标签: c++ template-specialization nested-class

以下代码给出了编译错误:

  

错误:非命名空间范围内的显式特化' struct应用'         模板< >

            ^
#include <iostream>

struct Apply
{
    template < typename ...BaseClasses>
    struct Inheritance;

    template < typename FirstBaseClass, typename ...OtherBaseClasses>
    struct Inheritance< FirstBaseClass, OtherBaseClasses... >   : FirstBaseClass
            , Inheritance< OtherBaseClasses... >
    {

    };

    template < >
    struct Inheritance< >
    {

    };
};

struct A{ int a; };
struct B{ int b; };
struct C{ int c; };

struct Example : Apply::Inheritance< A, B, C >
{
    void print() const
    {
        std::cout << a << std::endl;
        std::cout << b << std::endl;
        std::cout << c << std::endl;
    }
};

int main()
{
    Example ex;

    ex.print();

    return 0;
}

在另一篇文章中,我读到问题只是完整模板专业化,而使用部分模板专业化,我可以解决这个问题。但是如何在代码中更改继承递归来实现此目的呢?我尝试过,但我只打破了它......

1 个答案:

答案 0 :(得分:2)

这是XY problem。你必须简单地向外移动它。

template < >
struct Apply::Inheritance< >
{

};