gpt4 book ai didi

c++ - 使可选的模板参数成为 friend ?

转载 作者:太空狗 更新时间:2023-10-29 20:08:09 25 4
gpt4 key购买 nike

有一个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行代码的复杂类呢?是否有没有模板特化的替代解决方案?

最佳答案

我认为与假人交 friend 是你能做的最干净的事情,因为你不能继承或有条件地声明 friend 。您甚至不需要创建新的虚拟类型,因为:

[class.friend§3]

If the type specifier in a friend declaration designates a (possibly cv-qualified) class type, that class is declared as a friend; otherwise, the friend declaration is ignored.

这意味着您可以假装与 int 甚至 void 成为 friend ,他们会相处得很好。

此建议仅在 C++ 标准的范围内有效,不能作为现实生活指南。张贴者拒绝就建议的应用承担任何和所有责任。

关于c++ - 使可选的模板参数成为 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57200680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com