Hej,
mam dwie klasy w dwóch solucjach (libka o nazwie Lib i exec o nazwie Exec)
Lib:
solucja Lib, plik lib.hpp:
class Lib
{
public:
void test()
{
func();
std::cout << "test()" << std::endl;
}
void func();
};
solucja Exec, plik exec.cpp:
#include <iostream>
#include "lib.hpp"
// Fragment (A)
void Lib::func()
{
std::cout << "func()" << std::endl;
}
int main()
{
Lib lib;
lib.test();
return 0;
}
To się skompiluje bez problemu. Jenak czasem może zdarzyć się, że "// Fragment (A)" nie będzie dostarczony, a mimo to chcę żeby funkcja test była wykonywalna - wystarczyłoby pominąć funkcję func() w definicji metody test(), ten kod mógłby wyglądać tak:
class Lib
{
public:
void test()
{
require<func()> func();
std::cout << "test()" << std::endl;
}
void func();
};
Wiem, że jest to dosyć brzydkie rozwiązanie, powinno to być bardziej obiektowe ale...
Biblioteka Lib zawiera pewne klasy, które korzystają z metody test() klasy Lib i ta metoda powinna dostosować się do ustawień Exec. To Exec powinien decydować co tam się znajdzie - taki callback, który jest znany od samego początku istnienia programu.
Jakiś pomysł?
#edit:
Ewentualnie może funkcja func() powinna zawierać jakąś domyślną definicje i jakoś nadpisywać ją?