Теперь хм.. Полное решение. Итак, хотим чтобы:
1) Структура/класс/запись имела поля только для чтения, имела поля доступные только внутри модуля и имела поля доступные всем.
2) Хотим иметь доступ ко всем полям структуры внутри модуля.

Хедер (спецификация модуля):
## Код:
```
struct A
{
    int rwField; // полный доступ
    const int& roField; // поле только для чтения
    virtual ~A(){}
protected:
    A(int& ro) : roField(ro), rwField(0) {}
};

A* createA();
void setRo(A& self,int val); // просто для примера. меняет значение поля A::roField.
```


cpp'шник (ака тело модуля)
## Код:
```
#include "A.h"

namespace {

struct B : A {
    int ro;
    int privateField; // поле доступное только внутри модуля
    B() : A(ro), ro(666) {}
};

}

A* createA() {
    return new B;
}

void setRo(A& self, int val) {
    B* s = dynamic_cast<B*>(&self);
    if (s) s->ro = val;
}
```


Пример использования:
## Код:
```
#include <iostream>
#include "A.h"

int main()
{
    A* p_a = createA();
    std::cout << p_a->rwField << "\t" << p_a->roField << std::endl;

    p_a->rwField = 16;
    setRo(*p_a,255);

    std::cout << p_a->rwField << "\t" << p_a->roField << std::endl;

    delete p_a;

    return 0;
}
```
