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

Я новичок в программировании по C++, по этому нередко встречаюсь с определенными отличиями, как в синтаксисе, так и в реализации некоторых аспектов. Очень часто в ооп. Так вот, одна из основных идей, который я захотел реализовать в C++ вдохновившись от иного языка. Но как бы не знаю как, тут-то и нужна ваша помощь.

class A
{
  private:
  class B;
  
  public:
  A();

};

Вот в этом фрагменте кода, я объявил о создании нового приватного класса внутри другого класса. Однако мне бы хотелось его реализацию написать вне класса, или вообще в другом файле. Как можно это сделать ? Есть ли метод тоже самое сделать для шаблонных классов.

Дополнено: То что я пробывал с шаблонными классами:

template <typename T> class My_forwarded_list
{
public:

    My_forwarded_list();

private:
    class Node;
    int __size;
    Node* head;
};

template <typename T>
My_forwarded_list<T>::My_forwarded_list() : head{ new Node }
{
}

//Ошибка имеется вот тут, получаю следующую ошибку. E0498 template argument list must match the parameter lis

template <typename T>
My_forwarded_list<T>::Node
{

};

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Всё работает:

#include <iostream>

class A {
private:
    class B;
public:
    A();
};

class A::B {
public:
    void show() {
        std::cout << "B::show()\n";
    }
};

A::A() {
    B b;
    b.show();
}

int main() {
    A a;
}
$ g++ -std=c++17 -pedantic -Wall -Wextra -Werror temp.cpp && ./a.out 
B::show()
→ Ссылка