可能重复:
如何有条件地声明一个朋友类?
这个问题从Can朋友类在 C++03 中有条件地声明?. 具体来说,C++11 是否提供任何其他选项来帮助有条件地声明一个朋友类?也就是说,在 C++11 中是否有可能做到这一点?
通过 cplusplus.com,我遇到了std::enable_if
. 我尝试使用它,但无法找出正确的语法。std::enable_if
用于此目的的构造是否正确?下面是我尝试的代码,基于那里给出的例子。我在这里并不需要模板,但我不知道如何避免它,因为那里给出的所有示例代码都使用它。
class Foo {
template<typename T> struct std::enable_if<true, T> {
typedef T Bar;
friend class Bar;
};
};
这给出了以下编译错误消息:
prog.cpp:5:36: error: 'enable_if' is not a template
prog.cpp:5:55: error: qualified name does not name a class before '{' token
编辑只是为了使它更容易看到,如下评论中所述:此要求是不寻常的。这是我正在从事的硬件仿真新研究项目的一部分。测试台是用 C++ 编写的,我想以波形显示变量。我研究了各种其他选项,并发现出于实际考虑,我需要使用朋友类。朋友将捕获值并生成波形,但我希望仅在需要波形时才让朋友,而不是一直。