繁体   English   中英

私有类型的模板特化

[英]Template Specialization for Private Types

我有一个需要访问其模板类型特征的通用算法。 有一个 trait 类可以专门用于提供这些 trait。

在我的班级中使用此算法时,我想将它与在班级中定义的私有类型一起使用。

但是,专业化只能发生在我的类无法访问的namespace或全局范围内。

class A
{
    struct Secret 
    {};
};

template <typename T> struct Trait {};

// Inaccessible type ----vvvvvvvvv
template <> struct Trait<A::Secret> // Specialize for  PRIVATE type A::Secret
{ 
    A::Secret magic_value() { return{}; } // ERROR: 'A::Secret': cannot access private struct declared in class 'A'
};  

是否有可能以某种方式专门化具有私有类型的模板,至少在该类型可访问的范围内?

也许可以将专业化声明为friend类?

您可以通过模板朋友声明使类模板Trait成为类A 朋友

template <typename T> struct Trait {};
class A
{
    struct Secret 
    {};

    template <typename T>
    friend struct Trait;
};

或者参考A::Secret的完整专业化。

template <typename T> struct Trait {};
class A
{
    struct Secret 
    {};

    friend struct Trait<A::Secret>;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM