Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以在C+;中有条件地声明friend类吗+;11?_C++_C++11_Std_Friend - Fatal编程技术网

C++ 可以在C+;中有条件地声明friend类吗+;11?

C++ 可以在C+;中有条件地声明friend类吗+;11?,c++,c++11,std,friend,C++,C++11,Std,Friend,可能重复: 这个问题从另一个方面引出。具体来说,C++11是否提供了任何附加选项来帮助有条件地声明朋友类?也就是说,在C++11中有可能做到这一点吗 通过cplusplus.com,我遇到了。我试着使用它,但找不出正确的语法。std::enable_if是用于此目的的正确构造吗?下面是我根据这里给出的示例尝试的代码。这里我并不真正需要模板,但我不知道如何避免它,因为这里给出的所有示例代码都使用它 class Foo { template<typename T> struct

可能重复:

这个问题从另一个方面引出。具体来说,C++11是否提供了任何附加选项来帮助有条件地声明朋友类?也就是说,在C++11中有可能做到这一点吗

通过cplusplus.com,我遇到了。我试着使用它,但找不出正确的语法。
std::enable_if
是用于此目的的正确构造吗?下面是我根据这里给出的示例尝试的代码。这里我并不真正需要模板,但我不知道如何避免它,因为这里给出的所有示例代码都使用它

class Foo {
  template<typename T> struct std::enable_if<true, T> {
      typedef T Bar;
      friend class Bar;
  };
};

编辑只是为了使其更容易看到,如下面的评论中所述:此要求不寻常。这是我正在进行的一个新的硬件模拟研究项目的一部分。测试平台是用C++编写的,我想在波形中显示变量。我研究了各种其他选项,并发现出于实际考虑,我需要使用friend类。朋友将捕获值并生成波形,但我更希望只有在需要波形时才有朋友,而不是一直都有

[class.friend]/3告诉我们:

未声明函数的友元声明应具有以下形式之一:
类型说明符
友元简单类型说明符
好友类型名称说明符

因此,不可能有条件地声明类的朋友

实际上,您可以使用宏执行此操作:

class Foo {

#ifdef DECLARE_A_FRIEND
      friend class Bar;
#endif
  };
};

然后将宏定义或取消定义为编译参数。

[class.friend]/3告诉您:

未声明函数的友元声明应具有以下形式之一:
类型说明符
友元简单类型说明符
好友类型名称说明符

因此,不可能有条件地声明类的朋友

实际上,您可以使用宏执行此操作:

class Foo {

#ifdef DECLARE_A_FRIEND
      friend class Bar;
#endif
  };
};

然后将宏定义或取消定义为编译参数。

为什么要这样做?你想实现什么?@K-ballo我正在硬件模拟的一个新研究项目中使用这个。TestStand代码是用C++编写的,我想提供一个新的特性来查看仿真期间的波形中的成员变量值。friend类将捕获值并生成波形。我希望那个朋友只在需要波形时在场,而不是总是在场。顺便问一下,为什么要投反对票和关闭票?我问这个问题是为了解决一个实际问题。对于你们这些软件人来说,这可能是不寻常的、前所未闻的,但这并不意味着我不应该被允许问这个问题。请不要结束这个问题。我已经在上面的评论中解释了我试图实现的目标。如果这个问题需要改进,请解释你想让我详细说明什么。你为什么要这样做?你想实现什么?@K-ballo我正在硬件模拟的一个新研究项目中使用这个。TestStand代码是用C++编写的,我想提供一个新的特性来查看仿真期间的波形中的成员变量值。friend类将捕获值并生成波形。我希望那个朋友只在需要波形时在场,而不是总是在场。顺便问一下,为什么要投反对票和关闭票?我问这个问题是为了解决一个实际问题。对于你们这些软件人来说,这可能是不寻常的、前所未闻的,但这并不意味着我不应该被允许问这个问题。请不要结束这个问题。我已经在上面的评论中解释了我试图实现的目标。如果这个问题需要改进,请解释您希望我详细说明的内容。