First, I don't see why you want other function to see an object with data and no methods. What is the problem in passing the usual kind of object, which has both?
Second, what should that function see? An object with all-public member variables? Or just one with private member variables and fewer accessor/mutator methods than DataProcessorCore?
A relatively common idiom in C++ is to put as many methods as possible outside the object.
So your solution could be something like this:
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) { ...}
And then eliminate DataProcessorCore
entirely. You don't need it, because you have the object containing the data (and, I'd assume, a small set of core functions), and all the more extensive functionality can be implemented as free functions instead of in a dereived class.
The standard library uses this technique extensively. Think of std::sort
which is not a member of individual container classes, but a free function that can be called on a container.