【问题标题】:Passing a template's template member type as a template template argument将模板的模板成员类型作为模板模板参数传递
【发布时间】:2021-02-18 05:18:45
【问题描述】:

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

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

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

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

ExpectTT&lt;WithTTMember::TT&gt;可以成功实例化。

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

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

我希望ExpectTWithTT&lt;WithTTMember&gt;::XExpectTT&lt;WithTTMember::TT&gt; 的类型相同。但是上面的代码编译失败。

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

如何表达我想要的?

任何 C++ 版本都可以。

【问题讨论】:

    标签: c++ templates template-templates


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2019-04-24
    • 2011-07-06
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多