Napisałem asynchroniczną klasę zadań, która działa od wieków. Używa ona std::vector
jako podstawowej kolekcji do przechowywania zadań, a następnie przetwarza je później, jak można się spodziewać. Kiedy dodaję pracę, robi to push_back
na tym vector
.Pisanie szablonu, który może używać std :: vector lub std :: set
Niedawno zdecydowałem, że chcę wprowadzić szablonowy typ kolekcji, którego używa i sposób, w jaki ją napisałem, powinno być bardzo proste. To teraz zadeklarowane tak:
template<typename J, typename CollectionT = std::vector<J>>
class async_jobqueue
{
public:
Jest tylko jeden szkopuł, do pojemników typu vectorish chcę naciskać rzeczy na końcu kolekcji i nazwać push_back
dla settish pojemnikach typu będę chciał zadzwonić insert
. Jak mogę dokonać kompilacji decyzji o tym, do którego połączenia? A może jest przydatny adapter, którego mogę użyć?
Sprawdź to: http://stackoverflow.com/questions/257288/is-it-possible-to-write-a-cplate-to-check-for-a-functions-existence. To dało mi spokój, kiedy to przeczytałem. – SirPentor
@SirPentor To fajne, chociaż wygląda na to, że dałoby mi to sposób na ustalenie tego w czasie wykonywania. – Benj
Użyj 'SFIANE' (http://en.wikipedia.org/wiki/SFINAE) lub specjalizuj lub szablon. – phoeagon