请参阅自己的类型以获取模板模板参数[重复]

Posted

技术标签:

【中文标题】请参阅自己的类型以获取模板模板参数[重复]【英文标题】:Refer to own type for a template template parameter [duplicate] 【发布时间】:2015-12-03 20:01:35 【问题描述】:

这是我正在尝试做的最简单的情况:

template <template <typename...> class Wrapper>
struct WrapperTraits  ;

template <typename... Whatever>
struct Foo 
private:
    // I want Foo here to refer to the template, and not the current
    // concrete type (which is injected into the namespace by default)
    using Traits = WrapperTraits<Foo>;
;

int main()

    return 0;

这是 clang 3.6 上的错误(它在 gcc 4.8 和 5.2 上编译良好):

error: template argument for template template parameter must be a class template or type alias template
using Traits = WrapperTraits<Foo>;
^
1 error generated.
Compilation failed

以下是 Godbolt 上的示例:https://goo.gl/cSx6QR

感谢您的帮助!

【问题讨论】:

template&lt;class...Ts&gt;using Foo_Z=Foo&lt;Ts...&gt;; 然后使用Foo_Z? 无法重现错误:ideone.com/rXiUhl @tobi303 这是在 gcc 5.1 上。它无法在 clang 上编译。我在godbolt上提供了一个链接 对不起,我错过了“工作正常...”这一点 已知的 clang 错误。另一种解决方法是写Foo::template Foo 【参考方案1】:

没关系,想通了。需要将其范围限定为它所在的命名空间:

template <template <typename...> class Wrapper>
struct WrapperTraits  ;


template <typename... Whatever>
struct Foo 
private:
    using Traits = WrapperTraits<::Foo>; // explicit namespace
;


int main()

    return 0;

【讨论】:

以上是关于请参阅自己的类型以获取模板模板参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义模板以不包含某些类型[重复]

我要vi手册的模版,跪求

函数模板做函数参数

类模板中的static关键字

cumulocityiot mqtt静态模板

使用带有附加类型参数的奇怪重复模板模式 (CRTP)