gpt4 book ai didi

c++ - 如何在大型 C++ 源代码树中找到所有相互的友元?

转载 作者:行者123 更新时间:2023-11-30 02:10:40 24 4
gpt4 key购买 nike

在一个大型 C++ 源代码树中,定义了大约 600 个左右的类,我想找到每个类都声明另一个为友元的所有类对。

有很多情况下一个类是另一个类的友元,太多以至于不值得通过一个简单的 grep 结果来处理。

最佳答案

你可以在这里实现一种三重循环;算法可以如下:

  1. 第一个循环:找到所有有 friend 的类(class),记住 friend 的名字和实际类(class)的名字;
  2. 然后对所有类运行内循环,并找到一个与第 1 步中的 friend 同名的类。
  3. 然后对在步骤 2 中找到的类(class)的所有 friend 运行另一个内部循环。如果您找到了具有在步骤 1 中找到的名称的类(class) - 瞧 - 他们是共同的 friend 。

我相信 Perl 和正则表达式是处理这类事情的最佳工具。

附言确保这种方法有其局限性,因为并非 C++ 中的所有内容都可以使用正则表达式进行解析(using namespace 东西是我首先想到的)。但是,在某种程度上,这是可行的方法,如果您没有其他选择,可以尝试一下。

编辑:今天早上,当我还躺在床上时,我想到了一个主意。 :) 这个想法非常简单明了(就像所有早上的想法一样):使用 SQL!自然地,假设您有一个包含 2 列的类表,其中第一列是类名,第二列是它的 friend 的名字。比如说,像这样:

ClassName FriendName
C1 C2
C1 C3
C1 C4
C2 C1
C2 C8
C3 C1
C3 C2
... ...

然后您可以对其运行一个简单的查询。比如说,像这样的东西(抱歉,我手头没有任何 SQL DB,所以没有检查查询,但我希望你能理解并根据需要实现它:

SELECT ClassName as c, FriendName as f FROM T
WHERE c in
(SELECT FriendName FROM T
WHERE FriendName = c AND ClassName = f)

这个变体背后的想法是我们应该使用那些完全适合任务的通行费。当您需要处理一些数据集时,有什么能比得上 SQL?

关于c++ - 如何在大型 C++ 源代码树中找到所有相互的友元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394594/

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