Есть ли способ написать тело класса вне класса в котором он был объявлен?
Я новичок в программировании по 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()