- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个大型 C++ 源代码树中,定义了大约 600 个左右的类,我想找到每个类都声明另一个为友元的所有类对。
有很多情况下一个类是另一个类的友元,太多以至于不值得通过一个简单的 grep 结果来处理。
最佳答案
你可以在这里实现一种三重循环;算法可以如下:
我相信 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/
在 C++ 中,我使用多态类和友元来创建一个基本的“ friend 组”。但是,当我尝试访问类人(男孩类的 friend )的私有(private)年龄函数时,我无法访问它。有什么问题吗? /* Po
当一个 lambda 函数在 C 类的友元函数 F 中声明时,该 lambda 函数是否可以访问 C私有(private)成员(member)?具体来说,标准允许吗? 最佳答案 C++11 §[exp
首先回顾以前所学的构造函数 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在定义时被自动调用 由于构造函数没有返回值不能判断执行结果,所以不能保证初始
我想要一个模板化的友元函数。但是,我不知道如何使它在没有模板化功能的情况下以相同的方式工作。这是一个示例代码 #include namespace ns{ struct Obj { frie
我目前正在创建一个实用程序类,其中将包含重载的运算符。使它们成为成员或非成员 (friend) 函数的优缺点是什么?还是根本不重要?也许对此有最佳实践? 最佳答案 我会选择“C++ 编码标准:101
template struct test { template friend struct test; }; int main() {} 这是完全有效的代码,不是吗?我问是因为 MSVC+
相对于Java而言,友元是C++中特有的一种元素,很多教材上对其介绍的相对较少,因此初学的时候往往不能很快掌握,本文总结了友元的用法和一些注意的地方,供大家参考借鉴。希望能对初学C++的朋友起到一点
类中声明的友元函数和公共(public)函数有什么区别?当我们可以将好友功能公开并具有相同的访问权限时,使用好友功能还有什么意义呢? 最佳答案 public 指类成员函数的访问级别。 成员函数可以是公
如何在所有派生类中没有 friend 的情况下访问 privateMember? class parent{...}; //a virtual class class A: public paren
我是初学者级别的面向对象编程爱好者。我遇到了以下难题: class A { }; class B { protected: friend class A; }; class C { publi
前言:这些知识点属于C++较为前期的内容,博主在今年刷笔试题的时候遇到多次,所以特地这这篇博客再复习了一下。 1.构造函数的初始化 在推导之前,关于初始化我们先达成一点共识:初始化只能一次(记住这点)
大家好, 我正在尝试为我的数学 vector 类重载加法运算符。我的(看似逻辑正确的)简化代码是: template class Vector2 { private: T m_da
我是一名优秀的程序员,十分优秀!