簡體   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