я нахожу его очень привлекательный стиль программирования определить все методы на структуру/класса непосредственно встроенные в структурах, например, только определить структуры таким образом:метод класса встроенные определения
"A.hpp"
class A;
"A.cpp"
class A
{
A() = default;
void method() { }
};
, а не
"A.hpp"
class A
{
A();
void method();
};
"A.cpp"
A::A() = default;
void A::method() { }
Это означает определение классов/структур в файле кода и включение только декларации в файлы заголовков.
Однако это связано с проблемами, когда компилятору необходимо знать компоновку структуры/класса в других файлах кода.
Есть ли стиль программирования, который поддерживает это? Возможно, только получение и настройка полей через геттеры/сеттеры? Этот способ, однако, привел бы к большому количеству шаблонов.
Простое определение структуры/класса в файле заголовка приводит к проблемам с взаимно рекурсивными заголовочными файлами, если только они явно не помещают объявления в другой.
Я могу достичь этого стиля программирования на языке, подобном D, с помощью модульной системы, но как добиться этого на C++?
Чтобы использовать класс, компилятор должен знать, какой переменный он содержит (чтобы определить его размер), и то, что член функции она (так что он может генерировать символы для ссылки). Следовательно, определение класса всегда должно быть видимым в любом файле, который фактически использует этот класс (т. Е. Практически ничего, кроме объявления указателя или ссылки на него). Хотя ваша идея является допустимым вариантом (хотя это может замедлить компиляцию и/или сделать определение класса грязным), вы делаете это неправильно, если поместить определение класса в исходный файл. –
Модель компиляции C++ делает то, что вы пытаетесь сделать невозможным. – SergeyA
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что невозможно сделать то, что желает OP. – SergeyA