【发布时间】:2019-07-25 11:15:51
【问题描述】:
有一个post 解释模板参数可以用以下语法声明为友元:
template <typename T>
class A {
friend T;
};
但是如果在某些情况下 A 需要油炸而在其他情况下不需要呢?是否可以使 T 成为可选参数?
有没有比使用某种 FakeClass 作为 T 更好的解决方案?
EDIT1:我找到了另一个解决方案:
class B {};
template <typename T>
class A {
friend T;
};
template <>
class A<void> {
};
int main()
{
A<B> a1;
A<void> a2;
return 0;
}
但是如果 A 是一个有 300 行代码的复杂类呢?是否有没有模板专业化的替代解决方案?
【问题讨论】:
-
如果 A 很复杂,您可以再做一层抽象。您将所有实现移动到
A_Impl类中,并且 jusyt 在A的两个特化中都继承自它