C++两个存在依赖的模板模板参数编译报错如何解决
问题根因
你定义Duo的第一个模板模板参数HOLD时,声明它的入参是普通typename类型,但你实际要传入的Holder模板,本身要求的入参是单参数模板模板参数,二者签名不匹配。编译器按照你写的签名,认为HOLD<S>里需要传入一个类型,但S是未实例化的模板,自然触发类型不匹配报错。
修正方案
只需要调整Duo第一个模板模板参数的签名,匹配Holder的参数要求即可:
把原来的template<typename> class HOLD改为template<template<typename> class> class HOLD,明确声明HOLD是一个接收「单参数模板模板参数」的模板。
修正后可正常编译的完整代码如下:
template<class T> struct Solid { T _t; }; template<template<typename> class SE> struct Holder { SE<int> _se; }; // 仅修改此处HOLD的模板参数签名即可 template<template<template<typename> class> class HOLD, template<typename> class S> struct Duo { HOLD<S> _mem; }; int main() { Duo<Holder, Solid> a; return 0; }
内容的提问来源于stack exchange,提问作者user997112
相关产品推荐
相关产品推荐

