我有一个通用算法,需要访问它的模板类型的特征。有一个特征类可以专门用来提供这些特征。
当在我的类中使用此算法时,我希望将其与类中定义的私有类型一起使用。
但是,专门化只能在我的类不可访问的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类?
发布于 2016-08-04 15:37:05
您可以通过template friend declaration使类模板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>;
};https://stackoverflow.com/questions/38761076
复制相似问题