访问其他模板中的模板参数

Access template parameters in another template

本文关键字:参数 访问 其他      更新时间:2023-10-16

在下面的代码中:

class foo{};
class bar{};
template<class Type1=foo,class Type2=bar>
class A{};
template <class T= A<>>
class B
{
 public:
    void func(typename T::Type1 a){} //error  'Type1' : is not a member of 'A<foo,bar>'
};
int main()
{
    B<> b;
    b.func(foo()); //error
}

我想访问B模板的参数(Type1Type2在这种情况下)我怎么能使它工作?!

你需要"导出"这些类型,也就是说,将它们声明为你的类模板的公共类型。例如

template<class T1=foo,class T2=bar>
class A
{
 public:
  typedef T1 Type1;
  typedef T2 Type2;
};

c++ 11风格

template<class T1=foo,class T2=bar>
class A
{
 public:
  using Type1 = T1;
  using Type2 = T2;
};