私有类型的模板专业化
Template Specialization for Private Types
我有一个通用算法,需要访问其模板类型的特征。有一个特性类可以专门用于提供这些特性。
在类中使用此算法时,我希望将其与类中定义的私有类型一起使用。
但是,专业化只能发生在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>;
};
相关文章:
- C++模板 - 浮动和积分类型的不同专业化
- 任何指针类型的模板专业化
- 编写完整专业化以识别void类型的问题
- 调用每种类型的变异模板的正确模板专业化
- 我该如何允许类型的对象非专业化并在不使用指针的情况下识别何时是这种情况
- 非类型的模板专业化
- 我们可以专业化类模板的枚举(类型)成员吗?
- 使用声明类型选择函数专业化
- 联合类型的模板专业化
- 对于类型是类模板专业化的参数,ADL背后的理由是什么
- 类型和非型模板专业化
- C - 具有非类型模板参数的模板类上的专业化函数模板
- GCC 7 没有选择正确的类型特征专业化
- 特定模板类型的功能模板专业化
- Clang无法在模板类专业化中编译模板功能,该模板类专业化与模板声明具有 *不同的返回类型 *
- 对于需要其他模板参数的类型函数的部分模板专业化
- 统一功能使用模板专业化和接口来调用实例和原始类型
- 指针作为函数返回类型的部分专业化
- 忽略了部分功能专业化中价值类型的最高级别const预选赛
- 在基元类型模板专业化之间转换