Вы можете объявить класс в файле заголовка и затем разделить каждое из определений на свой собственный файл cpp. Затем у вас есть один главный файл cpp, который включает все эти файлы sub-cpp. При компиляции вы просто ссылаетесь на «главный» файл как на входной файл.
Многие шаблоны шаблонов создаются таким образом. Они используют расширение .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"
Препроцессор склеит все файлы в один большой файл для компиляции, но вы будете иметь преимущество, не имея сделать это самостоятельно.
Разве это облегчит вашу проблему для использования классов 'friend'? Вы можете разделить код на столько «дружеских» классов, сколько вам нужно, и эти классы все равно будут иметь доступ к внутренним элементам основного класса. И хотя вы будете использовать несколько классов, это будет похоже на один «концептуальный» класс. –
Поскольку не ясно, как разбить его, не будет очевидно, как его использовать. Получить большой экран;) – BitWhistler
В визуальной студии 2013 вы можете свернуть раздел кода. Свернуть все и только открыть то, над чем вы работаете. –