文件变得非常大,需要将数据分离到另一个文件中,但也需要使用私有变量.我怎样才能正确地做到这一点
File is getting really big need to separate data into another file but also need to use private variables. How can I achieve this correctly?
所以我有一个巨大的(遗留)文件,称之为huge.cxx。我正在添加新功能,但文件越来越大。我试图为不同的作业创建不同的类,但对于某些任务,我需要访问私有变量。以下是的大致情况
//HUGE.h
class Huge{
NewFeature object;
//...more stuff
};
//HUGE.cxx
Huge::Huge(){
//imagine object keeps track of id->func callback
object.on('uniqueID1', boost::bind(&HUGE::onID1Clicked,this));
}
void Huge::onID1Clicked()const{ return satisfiesSomeCondition(); }
//called internally when user right clicks
void Huge::createPopup()const{
for itr = object.begin to end
callback = itr->second;
//if satisfies condition add to popupmenu
if(callback()) addToPopupMenu( itr->first );
}
//event handler
void Huge::event(id){
//oh uniqueID1 was clicked as a menu item in right click
case 'uniqueID1': doSpecificFunctionality(); break;
}
所以你看,我有一些依赖关系,但文件太大了,我的更改也是如此。关于进一步分离成更多的文件,你有什么建议吗。我知道我可以在Huge文件中添加一个友元声明并添加另一个类,但如果可能的话,我想避免这个选项。
听起来您实际上需要进行一次重大重构,将关注点分离到适当的位置。
但是,为了解决眼前的问题,没有什么特别的理由需要在Huge.cxx
中定义所有的Huge
。您可以将函数定义拆分为单独的文件,只要每个函数都在的某个地方定义即可。
你可能会得到:
Huge.h
Huge-private.cxx
Huge-public.cxx
或者不管怎样,拆分代码都是有意义的。
只要所有的.cxx
文件都包括HUGE.h
,并且所有使用的函数都在那里声明(应该是这样),就可以将实现拆分为任意多的.cxx
文件。您甚至可以将每个函数放入自己的文件中。
要调用一个函数,编译器只需要从HUGE.h
中看到原型。稍后,当所有编译的文件链接在一起时,链接器将根据需要组合来自不同对象文件的代码。
认真的建议:了解重构(http://refactoring.com)以及设计模式。
如果没有看到整个的内容,就很难或不可能告诉你一些真正具体的东西。你可能需要一个重构武器库。对于某些部分,提取方法和合并通用功能是正确的;对于其他部分,依赖性反转可能是选择的工具。
除了一些关键的烂泥,(干净的)重写可能是最明智、最有利可图的事情:从定义输入和预期输出开始(在此期间,编写测试)。
相关文章:
- 通过多个头文件使用常量变量
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 无法通过头文件保存变量的值
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在 C++ 中将双精度变量写入二进制文件
- 如何使用文件中的文本,例如变量
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 复制文件流C++静态变量
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- C++将文本从.txt文件解析为变量
- 从 C 中的变量获取文件的路径,C++
- 使用boost ::日志配置文件变量
- C++:帮助存储和显示输入文件变量
- 文件变量的问题
- 如何在先决条件列表中展开生成文件变量
- QT多个文件c++变量