Piszę bibliotekę, która wiąże się z dużą ilością oszustw szablonowych i boost :: any. Zabrakło mi w sytuacji, gdy mają zasadniczo to:doładowanie :: any i szablony
boost::any a1, a2, a3, a4;
... i muszę wywołać funkcję, która wygląda tak:
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
mogłem uciekać się do nieprzyzwoicie zagnieżdżonych serii instrukcji if, ale zakładając, że obsługuję 10 różnych typów, to 10 000, jeśli instrukcje! Zwiększenie preprocesora może pomóc, ale to wciąż jest straszne rozwiązanie.
Czy istnieje lepszy sposób wywoływania funkcji szablonowej z zawartością boostu :: any bez uciekania się do tego rodzaju szaleństwa? O ile mogę powiedzieć, nie ma.
Tylko użytkownik z następujących 'boost :: any' instancja może uzyskać dokładną wartość w czasie wykonywania (dostarczając typ zakodowany), nie możesz wywołać tej funkcji z wartością zawartą w 'boost :: any', ponieważ jej typ został * wymazany * podczas kompilacji. Jaki jest większy problem, który próbujesz rozwiązać? 'boost :: any' to rzeczy dość niskiego poziomu. – GManNickG
Mieć wszystkie obiekty "jakikolwiek" jako jeden obiekt, a przy ustawianiu ich wszystkich na raz, również bezpieczny wskaźnik do prawidłowej instancji 'somefunc' (np.' & Somefunc '). –
Xeo
@GManNickG większy problem, który próbuję rozwiązać, polega na automatycznym generowaniu powiązań Lua po jednej stronie i zwiększeniu :: dowolnym zatrzymaniu wyniku z dowolnej asynchronicznej funkcji. W tej sytuacji nie można zastąpić drugiej. – Xtapolapocetl