【发布时间】:2012-12-21 06:26:07
【问题描述】:
我只想在某些(编译时)条件为真时声明一个友元类。例如:
// pseudo-C++
class Foo {
if(some_compile_time_condition) {
friend class Bar;
}
};
我在互联网上没有找到任何解决方案。我浏览了问题Generating Structures dynamically at compile time 的所有答案。他们中的许多人使用 C++11 std::conditional,但我想知道是否可以在 C++03 中做到这一点不使用预处理器。
这个解决方案https://stackoverflow.com/a/11376710/252576 将不起作用,因为friendship 没有被继承(friend class with inheritance)。
编辑只是为了让这个更容易看到,如下评论中所述:这个要求是不寻常的。这是我正在从事的硬件仿真新研究项目的一部分。测试台是用 C++ 编写的,我想以波形显示变量。我研究了各种其他选项,并发现出于实际考虑我需要使用friend class。朋友将捕获值并生成波形,但我希望仅在需要波形时才让朋友,而不是一直。
【问题讨论】:
-
我认为你需要一个预处理器
-
您能更具体地说明您要做什么吗?您可以尝试我们/我在 SO 上设计的所谓“passkey idiom”(即不广为人知)。
-
这是实际开发中非常不寻常的要求(另一方面,如果出于理论目的这样做是绝对可以的)。
-
@GManNickG 我在一个新的硬件仿真研究项目中使用它。测试台代码是用 C++ 编写的,我想提供一个新功能来在模拟期间查看波形中的成员变量值。
friend类将捕获值并生成波形。我希望那个朋友只在需要波形时出现,而不是总是出现。 -
@Yury 你说得对,这很不寻常。我已经在上面评论了用例。