首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成员类型模板专业化

成员类型模板专业化
EN

Stack Overflow用户
提问于 2015-03-29 20:34:46
回答 1查看 38关注 0票数 0

我有一个带有两个整数参数的类模板S1

代码语言:javascript
运行
复制
template <int A, int B> struct S1 { };

我有另一个带有一个整数参数的类模板S2。在S2中有一个类型模板My_S1,专门研究S1。当S1通过S2main中的专门化被实例化时,它工作得很好。

代码语言:javascript
运行
复制
template<int A> struct S2 {
  template<int B>
  using My_S1 = S1<A, B>;
};

int main(int argc, char *argv[]) {
  using S1_a = S2<0>::My_S1<0>;
}

但是,如果我试图按下面的方式在第三类模板中这样做,则在编译时会出现错误。完整代码:

代码语言:javascript
运行
复制
template<int A, int B>
struct S1 { } ;

template<int A>
struct S2 {
  template<int B>
  using My_S1 = S1<A, B>;
};

template<int A, int B>
struct S3 {
  using My_S1 = typename S2<A>::My_S1<B>; // I get an error on this line
};

int main(int argc, char * argv[]) {
  using S1_a = S1<0, 0>;         // works fine, of course
  using S1_b = S2<0>::My_S1<0>;  // works fine
  using S1_c = S3<2,1>::My_S1;   // ?
  return 0;
}

我得到的错误如下:

代码语言:javascript
运行
复制
error: expected ‘;’ before ‘<’ token
using My_S1 = typename S2<A>::My_S1<B>;
                                   ^
error: expected unqualified-id before ‘<’ token
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-29 20:38:09

您必须显式地告诉编译器S2<A>::My_S1是一个模板:

代码语言:javascript
运行
复制
//                            vvvvvvvv-- here
using My_S1 = typename S2<A>::template My_S1<B>;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29334526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档