首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >私有类型的模板专门化

私有类型的模板专门化
EN

Stack Overflow用户
提问于 2016-08-04 15:30:34
回答 1查看 388关注 0票数 3

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

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

但是,专门化只能在我的类不可访问的namespace或全局范围内发生。

代码语言:javascript
复制
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类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 15:37:05

您可以通过template friend declaration使类模板Trait成为类A的朋友。

代码语言:javascript
复制
template <typename T> struct Trait {};
class A
{
    struct Secret 
    {};

    template <typename T>
    friend struct Trait;
};

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

代码语言:javascript
复制
template <typename T> struct Trait {};
class A
{
    struct Secret 
    {};

    friend struct Trait<A::Secret>;
};
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38761076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档