C++ Как сделать функцию в функции
Всем доброго дня. У меня такой вопрос.
У меня есть структура под название Книга(Book) в пространстве имен Library и мне надо сделать поиск по имени книги и автору, и чтобы не писать отдельно 3 функции (интерфейс, поиск по имени, поиск по названию) хочу реализовать что-то в этом роде:
Library::FindBook().ByName();
Такую запись я видел в сторонних библиотеках по типу SFML или OpenGL, так что надеюсь мне помогут :)
Заранее спасибо!
Ответы (1 шт):
Вот небольшой пример для понимания самой идеи.
#include <iostream>
using namespace std;
class C {
public:
C& first() {
cout << "first\n" ;
return *this;
};
C& second() {
cout << "second\n";
return *this;
};
C& third() {
cout << "third\n" ;
return *this;
};
};
int main(int argc, char* argv[]) {
C c;
c.first().second().third();
}
Здесь все функции - члены одного класса. Но это не обязательно:
class A {
public:
void aa() {
cout << "A:aa()\n";
}
};
class B {
A a;
public:
A& bb() {
cout << "B:bb()\n";
return a;
}
};
class C {
B a;
public:
B& cc() {
cout << "C:cc()\n";
return a;
}
};
int main(int argc, char* argv[]) {
C c;
c.cc().bb().aa();
}
Главное - вернуть объект класса, для которого делается следующий вызов.
Если возвращать указатели, может быть такая цепочка:
c->cc()->bb()->aa();