c++ - 如何拆分一个超大类?

标签 c++ visual-studio-2013

我有六个与 IO 相关的类,所有类都有它们的小实用程序类等,总计约 1000 行。它们都必须一起在一个类中,因为根类被模板化以定义地址空间和使用模式,这使得在外部使用其成员非常方便。

尽管如此,处理它变得很痛苦,因为它需要大量滚动和点击,而且我必须记住所有内容的位置。 Afaik 在 C++ 中没有分部类这样的东西,有没有其他方法可以拆分这个巨大的头文件?

最佳答案

您可以在头文件中声明该类,然后将每个定义分离到它自己的 cpp 文件中。然后你有一个包含所有这些子 cpp 文件的主 cpp 文件。编译时,您只需引用“master”文件作为输入文件。

许多模板类都是通过这种方式创建的。他们使用 .tcc 扩展名来标记某些函数的实现,因此它不在头文件本身中。 C++ 不关心功能的实现位置,只要在编译和链接时可以找到即可。因此,虽然 C++ 本身没有 partial classes,但 partial class 的功能仍然隐式可用。

例如,

//BigClass.h
#pragma once
class BigClass
{
    // Lots of methods
    public:
        void doMethodA();
        void doMethodB();
        // ...
};

然后,有很多子文件,每个文件实现一个方法。

//BigClass_doMethodA.cc
void BigClass::doMethodA()
{
    // Method body
}

在另一个文件中你做同样的事情。

//BigClass_doMethodB.cc
void BigClass::doMethodB()
{
    // Method body
}

然后,您就有了一个“主”cpp 文件。

//BigClass.cpp
#include "BigClass.h"
#include "BigClass_doMethodA.cc"
#include "BigClass_doMethodB.cc"

预处理器会将所有文件粘合到一个大文件中进行编译,但您将受益于不必自己执行此操作。

关于c++ - 如何拆分一个超大类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443592/

相关文章:

c++ - 我是否需要手动删除或管理这个 unique_ptr

c++ - ndk-stack.exe 只显示 "Segmentation fault"

python - 重复存储在变量中的字符串 x 次

c++ - 安装 Visual Studio 2013 后的第一个构建错误。 fatal error LNK1561 : entry point must be defined

c++ - VS2013 Unresolved External with 构造函数和析构函数

c# - 如何获取 CSLA 调用的代码的代码覆盖率信息?

c++ - WINAPI:禁用 stdin stdout stderr 句柄的继承

c++ - 我可以从 Rust 代码调用 C 或 C++ 函数吗?

c# - 在 Windows 8.1 上全新安装 Visual Studio 2013 后出现 ASP.NET MVC Razor 错误

wcf - Visual Studio 2013 : Debug using IP Address instead of LocalHost