嵌套 class 模板完全专业化与部分专业化
Nested class template full specialization versus partial specialization
以下代码给出了编译错误:
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;
}
在另一个 post 中,我读到问题出在 完整模板专业化 和 部分模板专业化 [=20] =] 我可以解决这个问题。但是我怎样才能改变我的代码中的继承递归来实现这个呢?我试过了,但我只是把它弄坏了...
这是一个XY problem。你必须简单地将它向外移动。
template < >
struct Apply::Inheritance< >
{
};
以下代码给出了编译错误:
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;
}
在另一个 post 中,我读到问题出在 完整模板专业化 和 部分模板专业化 [=20] =] 我可以解决这个问题。但是我怎样才能改变我的代码中的继承递归来实现这个呢?我试过了,但我只是把它弄坏了...
这是一个XY problem。你必须简单地将它向外移动。
template < >
struct Apply::Inheritance< >
{
};