微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将模板的模板成员类型作为模板模板参数传递

如何解决将模板的模板成员类型作为模板模板参数传递

WithTTMember 具有名为 TT 的模板成员类型。

struct WithTTMember {
    template<typename> using TT = void;
};

一个ExpectTT 采用模板模板参数:

template< template<typename> typename TT >
struct ExpectTT {};

ExpectTT<WithTTMember::TT> 可以成功实例化。

第三个类 ExpectTWithTT 需要一个模板参数,模板成员类型名为 TT,并使用它实例化 ExpectTT

template<typename T>
struct ExpectTWithTT {
    using X = ExpectTT<typename T::TT>;  // this doesn't compile
};

我希望 ExpectTWithTT<WithTTMember>::XExpectTT<WithTTMember::TT> 的类型相同。但是上面的代码无法编译。

我尝试在编译器消息和我的直觉之后使用 templatetypename 关键字的组合注入错误的行,但我无法让它工作。

如何表达我想要的?

任何 C++ 版本都可以。

解决方法

您应该使用 template 关键字来说明 T::TT 是一个模板。

template<typename T>
struct ExpectTWithTT {
    using X = ExpectTT<T::template TT>;
    //                    ^^^^^^^^
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。