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

标签 c++ templates template-templates

A类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> 的类型相同.但是上面的代码编译失败。
我尝试使用 template 的组合注入(inject)故障线路和 typename编译器消息和我的直觉之后的关键字,但我无法让它工作。
如何表达我想要的?
任何 C++ 版本都可以。

最佳答案

您应该使用 template 关键字告诉 T::TT是一个模板。

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

关于c++ - 将模板的模板成员类型作为模板模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254082/

相关文章:

c++ - 将 using/typedef 限制在类范围内

c++ - 如何编写适用于映射和对 vector 的 C++ 模板>

c++ - 部分专用模板作为模板参数

C++调用从基类派生的覆盖函数

c++ - 虚函数默认参数和重载

c++ - 我可以在进入 gpu 之前从视频游戏中记录图形数据吗?

c# - 计算机视觉 : Segmentation of XRay image vertebrae detection

c++ - 实现快速模板数组重置方法

c++ - 在类成员函数中将模板类作为模板模板参数传递

c++ - 使用模板作为参数时的函数模板特化