gpt4 book ai didi

c++ - 可以在 C++03 中有条件地声明友元类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:05 24 4
gpt4 key购买 nike

我只想在某些(编译时)条件为真时声明一个友元类。例如:

// 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。 friend 会捕获值并生成波形,但我更希望只有在需要波形时才让 friend ,而不是所有时间。

最佳答案

使用 friend std::conditional<C, friendclass, void>::type;其中 C是你的条件。非类类型的 friend 将被忽略。

条件模板很容易在 C++03 中实现。但是,由于 C++03 不支持 typedef friend ,因此您需要在那里使用以下语法

namespace detail { class friendclass {}; }

class Foo {
friend class std::conditional<C,
friendclass, detail::friendclass>::type::friendclass;
};

请注意,在此解决方法中,详细虚拟类名称需要与潜在 friend 的名称相匹配。

关于c++ - 可以在 C++03 中有条件地声明友元类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13985292/

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