Можно ли и создать экземпляр класса (с++) с проинициализированными полями?
$ cat > test.cpp <<EOF
class type_class {
        int field1;
        int field2;
public:
        constexpr type_class (int f1, int f2): field1(f1), field2(f2) {
        }
};
extern const type_class var;
const type_class var(12, 34);
EOF
$ g++ -S -O2 test.cpp
$ cat test.s
        .file   "test.cpp"
        .globl  var
        .section        .rodata
        .align 8
        .type   var, @object
        .size   var, 8
var:
        .long   12
        .long   34
        .ident  "GCC: (Debian 6.3.0-18+deb9u1) 6.3.0 20170516"
        .section        .note.GNU-stack,"",@progbits
Т.е. constexpr конструктор, в результате -- готовый инициализированный объект в секции .rodata, что и требовалось.
> поля класса не будут меняться в процессе
значит, их нужно делать статическими константами и, возможно, вообще убрать класс, заменив на namespace.
> "Говорят" можно через шаблон, но как не сказали) 
По сути, те же статические константы, только могут быть только целым числом и не имеют адреса.template< int X, int Y >
class NAME
{
public:
    enum { field1 = X, field2 = Y };
};

typedef NAME<5,7> Name57;

int a = Name57::field1;
int b = Name57::field2;