I have been developing a library for a while and now that I think it's ready, I am trying to follow the pimpl principle in order to hide implementation details.
// File Class.h
class Class {
public:
Class();
private:
class ClassImpl;
ClassImpl* rep;
};
// File Class.cpp
#include "Class.h"
#include "ClassImpl.h"
Class::Class() {
rep = new ClassImpl();
}
The implementation class is defined in another file as follow
// File ClassImpl.h
#include "Class.h"
class Class::ClassImpl {
public:
ClassImpl();
};
And its implementation:
// File ClassImpl.cpp
#include "ClassImpl.h"
#include <iostream>
using C = Class::ClassImpl; // error: 'class Class::ClassImpl' is private
C::ClassImpl() {
std::cout << "Implementation constructor";
}
Main function:
// File main.cpp
#include "Class.h"
int main() {
Class c;
return 0;
}
Doing this, the compiler says error: 'class Class::ClassImpl' is private
on the using line in ClassImpl.cpp
. If I remove it and use Class::ClassImpl
instead, everything works fine.
Is there a way to use using
on the private nested class ClassImpl
?