циклическая ссылка — прямое объявление методов класса C ++

Есть ли способ переопределить класс для определения методов, которые только объявили это далеко?

Например. что-то вроде:

class A
{
void a();
void b() {}
}

class A
{
void a() {}
}

вместо

class A
{
void a();
void b() {}
}

A::a() {}

Причина в том, что я создал много кода с методами, определенными внутри определения класса, без использования заголовков. До сих пор у меня не было циклических ссылок, но в последнее время это необходимо. Я не люблю определять группы методов Type::method синтаксис, так как только очень немногие методы должны быть известны до последнего определения класса.

Так что мне нравится что-то вроде backward declaration, объявите или определите только несколько методов ранее для циклических ссылок и определите весь класс позже.

0

Решение

Нет, нет способа переопределить класс.

Согласно стандарту языка C ++ определения классов:

class-specifier:
class-head { member-specification_opt }

Стандарт прямо говорит, что спецификация члена должна быть полной в определении класса:

Членами класса являются члены данных, функции-члены (9.3), вложенные типы и перечислители. Спецификация члена в определении класса объявляет полный набор членов класса; ни один участник не может быть добавлен в другом месте.

Также в стандарте приведен пример переопределения класса:

struct S { int a; };
struct S { int a; }; // error, double definition

является плохо формируется потому что он определяет S дважды.

3

Другие решения

К сожалению, нет способа объявить класс снова, как только он будет закрыт },

Единственное, что вы можете сделать, это унаследовать и определить метод.

class B : public A { a() {} } ;
0

По вопросам рекламы [email protected]