2015-11-06 5 views
0

Следующий код дает мне ошибку компиляции:Вложенный шаблон класса полной специализации по сравнению с частичной специализации

error: explicit specialization in non-namespace scope 'struct Apply' template < >

  ^
#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; 
} 

В другом посте я прочитал, что эта проблема является только полная специализация шаблона и что с частичный шаблон специализации Я мог бы исправить это. Но как я могу изменить рекурсию наследования в моем коде, чтобы достичь этого? Я попытался, но я только сломал это плохо ...

ответ

2

Это XY problem. Вы должны просто переместить его наружу.

template < > 
struct Apply::Inheritance< > 
{ 

}; 
+0

Спасибо! Я пробовал все, кроме самой простой вещи! – nyarlathotep108