如何使用没有名字的c类?
我在opensource c代码中遇到了问题.以下是描述我的问题的小型简化版本:
#include <iostream> using namespace std; #define TOGETHER2(a,b) a ## b #define TOGETHER(a,b) TOGETHER2(a,b) #define GENERATE_NAME(a) TOGETHER(a,__COUNTER__) #define GENERATE GENERATE_NAME(__seed_) class base{ }b; class GENERATE:public base{ }GENERATE; class GENERATE:public base{ }GENERATE; class GENERATE:public base{ }GENERATE; class GENERATE:public base{ }GENERATE; int main(){ return 0; } 我们可以看到,作者定义了几个继承基类的类.但作者并不关心课程的名称.所以我想知道如何在不指定名称的情况下使用这些类? 这是c中我不知道的一种设计模式吗? 谢谢 :) 我想加上我的猜测,使问题清楚. 我的猜测: 这些类的名称是从__seed_生成的,但是当我搜索文件时,我找不到对__seed_的其他引用,所以我确信作者没有使用名称__seed_1,__ seed_2来创建类. (实际上作者说评论她并不关心课程的名称) 我还猜测作者可能已经通过基类(虚函数)中定义的接口使用了这些类.为此,作者仍然需要创建这些类,但正如我所提到的,我在代码的其他部分找不到__seed_,因此作者无法创建类,因此虚函数也不起作用. 实际上,我尝试删除这些类定义,奇怪的是代码编译正确.然而,它失去了一些功能,但它不仅仅是核心转储.它仍然可以成功地完成一些任务 那么,有谁知道: >我们如何在不指定名称的情况下使用这些类? 添加: 真的很感谢你的帮助:) 解决方法
我建议您编辑代码并添加类的名称.这是一个奇怪的设计模式,我建议你不要使用这种模式,除非你想阻止其他人使用你的类.
如果作者希望您使用这些类,可能有一些方法可以在不编辑代码和添加名称的情况下使用它们.您应该参考文档.
所有这些生成的类都是从基类派生的.因此,如果删除一个类,则它之后的所有类都会收到一个新生成的名称.如果代码现在编译,则意味着其他代码仅调用属于基类的方法.但是其他代码现在使用的是其他类,而不是它最初使用的类,这会导致您观察到的错误. 考虑一下: >最初生成的类具有名称A,B和C.>你删除A类.>现在生成的类具有名称A和B.名为C的类不再存在,因此使用它的代码不应再编译.而之前使用过A类和B类的代码,现在使用的是以前的B和C类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails-3 – 当点/周期处于条件值时,ActiveRecord查
- c# – Web Api路由故障
- Oracle SQL:使用Select语句插入序列
- 【Spring学习09】依赖配置:配置集合
- libxml++移出对glibmm等库的依赖
- 使用Cocoapods的iOS Analytics 3.17 for iOS现在支持Bitcod
- c# – .NET核心项目参考问题 – “无法找到’XXX.csproj’的
- Oracle PL-SQL Developer集成TFS进行团队脚本文件版本管理
- mvn依赖
- 动态变化大小的RichTextBox: "Bottomless RichTexBox&#