Во-первых, я не вижу , почему вы хотите, чтобы другая функция видела объект с данными и без методов. В чем проблема при прохождении обычного типа объекта, который имеет оба?
Во-вторых, что должна видеть эта функция? Объект с общедоступными переменными-членами? Или только одна с закрытыми переменными-членами и меньше методов доступа / мутатора, чем DataProcessorCore?
Относительно распространенная идиома в C ++ заключается в размещении как можно большего количества методов вне объекта.
Итак, ваше решение может быть примерно таким:
class DataProcessor {
// Fill in only the basics. Member variables and a small set of "core" functions to access/modify them.
};
void ComplexOperation(DataProcessor& proc) { ...}
float AnotherOperation(DataProcessor& proc, int i) { ...}
А затем полностью исключить DataProcessorCore
. Вам это не нужно, потому что у вас есть объект, содержащий данные (и, я бы предположил, небольшой набор основных функций), и все более широкие функциональные возможности могут быть реализованы в виде свободных функций, а не в извлеченном классе.
Стандартная библиотека широко использует эту технику. Подумайте о std::sort
, который не является членом отдельных классов контейнеров, но является бесплатной функцией, которую можно вызывать в контейнере.