我有一个通用算法,需要访问其模板类型的特征。有一个特征类可以专门用于提供这些特征。
在我的类中使用此算法时,我想将其与类中定义的私有类型一起使用。
然而,专门化只能发生在名称空间
或全局范围内,而我的类是不可访问的。
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>;
};
还尝试在专门化的中进行模板方法专门化: 这一次它编译,但调用原始方法,即 解决方案
我想用两种模板类型编写一个模板化函数:一种是bool,另一种是typename,我想专门研究typename。 这就是我想要的,但只针对T的几种类型: 没有bool在那里,我可以做这样的事情: 我搞不懂这句话的语法,而专门化方面的微软文档只涉及单一类型的情况。
也许我累了,但是我被这个简单的局部特化卡住了,它不起作用,因为指定模板参数: 将替换为,或没有帮助。那么这种专门化是否可能呢?
但是指定它是,因此它不再是模板类。它是否可以像虚函数一样专门化或重写?
关于下一个代码,我有一些问题: > 类专业化
我有这样的代码: 这段代码的目的是:如果是或的子类,则将推导为,否则推导为