私有类型的模板专业化

2024-03-31

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

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

然而,专业化只能发生在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 class?


你可以制作类模板Trait班上的朋友A via 好友声明模板 http://en.cppreference.com/w/cpp/language/friend#Template_friends.

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>;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

私有类型的模板专业化 的相关文章

随机推荐