¿Es el idioma pimpl utilizado en C#?
Eso depende de a qué te refieres con este modismo.
La expresión idiomática en cuestión consiste esencialmente en separar los detalles de implementación de un tipo en una clase y el área de superficie pública en una clase contenedora que simplemente se aferra a un puntero a la clase de implementación.
Esto tiene dos ventajas.
Primero, en C++ puede conducir a mejoras en el tiempo de compilación porque los consumidores de la superficie pública solo necesitan analizar el archivo de encabezado que contiene el área de superficie pública; no necesitan analizar el archivo de encabezado que contiene los detalles de implementación.
En segundo lugar, conduce a una separación muy clara de la interfaz de la implementación; la implementación puede cambiar completamente sin que haya ningún impacto sobre el consumidor, porque el consumidor nunca ve los detalles de la implementación.
El primer beneficio es sin importar en C#. El compilador de C# es rápido. (En gran parte, por supuesto, porque el lenguaje fue diseñado para ser rápido de compilar).
El segundo beneficio es de gran utilidad en C#. En C#, la forma idiomática de implementar este patrón sería hacer una clase privada anidada que haga el trabajo "real" y una clase pública que sea solo una fachada con el área de superficie pública.
Una técnica más me gusta en C# es hacer que la clase pública la clase base de de la clase anidada privada, ponga la clase base de un constructor privado para evitar la extensión de terceros, y utilizar el patrón de la fábrica para repartir casos de la clase anidada privada.
Realmente no entiendo por qué no se puede hacer lo mismo con C++.
Luego lo animo a intentar escribir un compilador de C++ que lo haga. O bien logrará crear un compilador de C++ mucho más rápido, o descubrirá por qué no se puede hacer lo mismo en C++. ¡Te beneficias de cualquier manera!
No es "necesario" en C++, simplemente está ahí para ahorrar en tiempos de compilación (y en algunos casos para mantener la compatibilidad binaria). Si C++ compilado/vinculado tan rápido como C compila, dudo que alguien se moleste. – ildjarn
Puede encontrar la publicación de Eric Lippert, [How Many Passes] (http://blogs.msdn.com/b/ericlippert/archive/2010/02/04/how-many-passes.aspx), de interés. – Brian