39 #ifndef CGU_CALLBACK_H
40 #define CGU_CALLBACK_H
1134 #include <functional>
1208 template <
class... FreeArgs>
1248 #ifdef CGU_USE_GLIB_MEMORY_SLICES_NO_COMPAT
1269 template <
class... T>
1271 return (f1.cb_s.get() == f2.cb_s.get());
1279 template <
class... T>
1295 template <
class... T>
1297 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
1305 template <
class... T>
1307 return (f1.cb_s.get() == f2.cb_s.get());
1315 template <
class... T>
1326 template <
class... T>
1328 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
1337 #ifndef DOXYGEN_PARSING
1342 template <
class... T>
1343 struct hash<Cgu::Callback::FunctorArg<T...>> {
1344 typedef std::size_t result_type;
1346 result_type operator()(
const argument_type& f)
const {
1353 template <
class... T>
1354 struct hash<Cgu::Callback::SafeFunctorArg<T...>> {
1355 typedef std::size_t result_type;
1357 result_type operator()(
const argument_type& f)
const {
1366 #endif // DOXYGEN_PARSING
1427 template <
class... FreeArgs>
1429 SharedPtr<
const CallbackArg<FreeArgs...>> cb_s;
1452 if (cb_s.get()) cb_s->dispatch(args...);
1543 template <
class... FreeArgs>
1544 class SafeFunctorArg {
1559 if (cb_s.get()) cb_s->dispatch(args...);
1640 template <
class T,
class... FreeArgs>
1649 (obj->*func)(free_args...);
1654 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1657 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...);
1664 (obj->*func)(arg, free_args...);
1666 template <
class Arg>
1668 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1671 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1674 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...);
1682 (obj->*func)(arg1, arg2, free_args...);
1684 template <
class Arg1,
class Arg2>
1687 Arg2&& arg2_): obj(&obj_), func(func_),
1688 arg1(std::forward<Arg1>(arg1_)),
1689 arg2(std::forward<Arg2>(arg2_)) {}
1692 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1695 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1704 (obj->*func)(arg1, arg2, arg3, free_args...);
1706 template <
class Arg1,
class Arg2,
class Arg3>
1711 obj(&obj_), func(func_),
1712 arg1(std::forward<Arg1>(arg1_)),
1713 arg2(std::forward<Arg2>(arg2_)),
1714 arg3(std::forward<Arg3>(arg3_)) {}
1717 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1718 class BoundArg4,
class... FreeArgs>
1721 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
1731 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1733 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1739 obj(&obj_), func(func_),
1740 arg1(std::forward<Arg1>(arg1_)),
1741 arg2(std::forward<Arg2>(arg2_)),
1742 arg3(std::forward<Arg3>(arg3_)),
1743 arg4(std::forward<Arg4>(arg4_)) {}
1746 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1747 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1750 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1751 BoundArg4, BoundArg5, FreeArgs...);
1762 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1764 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1771 obj(&obj_), func(func_),
1772 arg1(std::forward<Arg1>(arg1_)),
1773 arg2(std::forward<Arg2>(arg2_)),
1774 arg3(std::forward<Arg3>(arg3_)),
1775 arg4(std::forward<Arg4>(arg4_)),
1776 arg5(std::forward<Arg5>(arg5_)) {}
1781 template <
class T,
class... FreeArgs>
1790 (obj->*func)(free_args...);
1795 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1798 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...)
const;
1805 (obj->*func)(arg, free_args...);
1807 template <
class Arg>
1809 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1812 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1815 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...)
const;
1823 (obj->*func)(arg1, arg2, free_args...);
1825 template <
class Arg1,
class Arg2>
1828 Arg2&& arg2_): obj(&obj_), func(func_),
1829 arg1(std::forward<Arg1>(arg1_)),
1830 arg2(std::forward<Arg2>(arg2_)) {}
1833 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1836 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const;
1845 (obj->*func)(arg1, arg2, arg3, free_args...);
1847 template <
class Arg1,
class Arg2,
class Arg3>
1852 obj(&obj_), func(func_),
1853 arg1(std::forward<Arg1>(arg1_)),
1854 arg2(std::forward<Arg2>(arg2_)),
1855 arg3(std::forward<Arg3>(arg3_)) {}
1858 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1859 class BoundArg4,
class... FreeArgs>
1862 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
const;
1872 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1874 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1880 obj(&obj_), func(func_),
1881 arg1(std::forward<Arg1>(arg1_)),
1882 arg2(std::forward<Arg2>(arg2_)),
1883 arg3(std::forward<Arg3>(arg3_)),
1884 arg4(std::forward<Arg4>(arg4_)) {}
1887 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1888 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1891 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1892 BoundArg4, BoundArg5, FreeArgs...)
const;
1903 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1905 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1912 obj(&obj_), func(func_),
1913 arg1(std::forward<Arg1>(arg1_)),
1914 arg2(std::forward<Arg2>(arg2_)),
1915 arg3(std::forward<Arg3>(arg3_)),
1916 arg4(std::forward<Arg4>(arg4_)),
1917 arg5(std::forward<Arg5>(arg5_)) {}
1922 template <
class... FreeArgs>
1935 template <
bool unref,
class BoundArg,
class... FreeArgs>
1938 typedef void (*
Func)(BoundArg, FreeArgs...);
1944 func(arg, free_args...);
1946 template <
class Arg>
1950 template <
bool unref,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1953 typedef void (*
Func)(BoundArg1, BoundArg2, FreeArgs...);
1960 func(arg1, arg2, free_args...);
1962 template <
class Arg1,
class Arg2>
1964 Arg2&& arg2_): func(func_),
1965 arg1(std::forward<Arg1>(arg1_)),
1966 arg2(std::forward<Arg2>(arg2_)) {}
1969 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1972 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1980 func(arg1, arg2, arg3, free_args...);
1982 template <
class Arg1,
class Arg2,
class Arg3>
1988 arg1(std::forward<Arg1>(arg1_)),
1989 arg2(std::forward<Arg2>(arg2_)),
1990 arg3(std::forward<Arg3>(arg3_)) {}
1993 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1994 class BoundArg4,
class... FreeArgs>
1997 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
2006 func(arg1, arg2, arg3, arg4, free_args...);
2008 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
2015 arg1(std::forward<Arg1>(arg1_)),
2016 arg2(std::forward<Arg2>(arg2_)),
2017 arg3(std::forward<Arg3>(arg3_)),
2018 arg4(std::forward<Arg4>(arg4_)) {}
2021 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2022 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2025 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3,
2026 BoundArg4, BoundArg5, FreeArgs...);
2036 func(arg1, arg2, arg3, arg4, arg5, free_args...);
2038 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
2046 arg1(std::forward<Arg1>(arg1_)),
2047 arg2(std::forward<Arg2>(arg2_)),
2048 arg3(std::forward<Arg3>(arg3_)),
2049 arg4(std::forward<Arg4>(arg4_)),
2050 arg5(std::forward<Arg5>(arg5_)) {}
2061 template <
class... FreeArgs>
2063 std::function<void(FreeArgs...)> f;
2071 template <
class Lambda,
class... FreeArgs>
2096 template <
class T,
class... FreeArgs>
2098 void (T::*func)(FreeArgs...)) {
2099 return new Callback0<T, FreeArgs...>{t, func};
2114 template <
class T,
class... FreeArgs>
2116 void (T::*func)(FreeArgs...)) {
2117 return new Callback0<T, FreeArgs...>{t, func};
2132 template <
class T,
class... FreeArgs>
2134 void (T::*func)(FreeArgs...)) {
2135 return new Callback0<T, FreeArgs...>{t, func};
2149 template <
class T,
class BoundArg,
class... FreeArgs>
2151 void (T::*func)(BoundArg, FreeArgs...),
2153 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2173 template <
class T,
class BoundArg,
class... FreeArgs>
2175 void (T::*func)(BoundArg, FreeArgs...),
2176 const BoundArg& arg) {
2177 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2198 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2200 void (T::*func)(BoundArg, FreeArgs...),
2202 return new Callback1<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2216 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2218 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2221 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2241 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2243 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2244 const BoundArg1& arg1,
2245 const BoundArg2& arg2) {
2246 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2267 template <
class T,
class BoundArg1,
class BoundArg2,
2268 class Arg1,
class Arg2,
class... FreeArgs>
2270 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2273 return new Callback2<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2274 std::forward<Arg1>(arg1),
2275 std::forward<Arg2>(arg2)};
2289 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2291 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2295 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2315 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2317 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2318 const BoundArg1& arg1,
2319 const BoundArg2& arg2,
2320 const BoundArg3& arg3) {
2321 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2342 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2343 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2345 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2349 return new Callback3<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2350 std::forward<Arg1>(arg1),
2351 std::forward<Arg2>(arg2),
2352 std::forward<Arg3>(arg3)};
2366 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2367 class BoundArg4,
class... FreeArgs>
2369 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2370 BoundArg4, FreeArgs...),
2375 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2376 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2396 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2397 class BoundArg4,
class... FreeArgs>
2399 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2400 BoundArg4, FreeArgs...),
2401 const BoundArg1& arg1,
2402 const BoundArg2& arg2,
2403 const BoundArg3& arg3,
2404 const BoundArg4& arg4) {
2405 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2406 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2427 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2428 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2430 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2431 BoundArg4, FreeArgs...),
2436 return new Callback4<
true, T, BoundArg1, BoundArg2, BoundArg3,
2437 BoundArg4, FreeArgs...>{t, func,
2438 std::forward<Arg1>(arg1),
2439 std::forward<Arg2>(arg2),
2440 std::forward<Arg3>(arg3),
2441 std::forward<Arg4>(arg4)};
2455 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2456 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2458 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2459 BoundArg4, BoundArg5, FreeArgs...),
2465 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2466 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2486 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2487 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2489 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2490 BoundArg4, BoundArg5, FreeArgs...),
2491 const BoundArg1& arg1,
2492 const BoundArg2& arg2,
2493 const BoundArg3& arg3,
2494 const BoundArg4& arg4,
2495 const BoundArg5& arg5) {
2496 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2497 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2518 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2519 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2521 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2522 BoundArg4, BoundArg5, FreeArgs...),
2528 return new Callback5<
true, T, BoundArg1, BoundArg2, BoundArg3,
2529 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2530 std::forward<Arg1>(arg1),
2531 std::forward<Arg2>(arg2),
2532 std::forward<Arg3>(arg3),
2533 std::forward<Arg4>(arg4),
2534 std::forward<Arg5>(arg5)};
2548 template <
class T,
class... FreeArgs>
2550 void (T::*func)(FreeArgs...)
const) {
2566 template <
class T,
class... FreeArgs>
2568 void (T::*func)(FreeArgs...)
const) {
2584 template <
class T,
class... FreeArgs>
2586 void (T::*func)(FreeArgs...)
const) {
2601 template <
class T,
class BoundArg,
class... FreeArgs>
2603 void (T::*func)(BoundArg, FreeArgs...)
const,
2605 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2625 template <
class T,
class BoundArg,
class... FreeArgs>
2627 void (T::*func)(BoundArg, FreeArgs...)
const,
2628 const BoundArg& arg) {
2629 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2650 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2652 void (T::*func)(BoundArg, FreeArgs...)
const,
2654 return new Callback1_const<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2668 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2670 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2673 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2693 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2695 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2696 const BoundArg1& arg1,
2697 const BoundArg2& arg2) {
2698 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2719 template <
class T,
class BoundArg1,
class BoundArg2,
2720 class Arg1,
class Arg2,
class... FreeArgs>
2722 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2725 return new Callback2_const<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2726 std::forward<Arg1>(arg1),
2727 std::forward<Arg2>(arg2)};
2741 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2743 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2747 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2767 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2769 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2770 const BoundArg1& arg1,
2771 const BoundArg2& arg2,
2772 const BoundArg3& arg3) {
2773 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2794 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2795 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2797 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2801 return new Callback3_const<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2802 std::forward<Arg1>(arg1),
2803 std::forward<Arg2>(arg2),
2804 std::forward<Arg3>(arg3)};
2818 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2819 class BoundArg4,
class... FreeArgs>
2821 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2822 BoundArg4, FreeArgs...)
const,
2828 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2848 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2849 class BoundArg4,
class... FreeArgs>
2851 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2852 BoundArg4, FreeArgs...)
const,
2853 const BoundArg1& arg1,
2854 const BoundArg2& arg2,
2855 const BoundArg3& arg3,
2856 const BoundArg4& arg4) {
2858 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2879 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2880 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2882 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2883 BoundArg4, FreeArgs...)
const,
2889 BoundArg4, FreeArgs...>{t, func,
2890 std::forward<Arg1>(arg1),
2891 std::forward<Arg2>(arg2),
2892 std::forward<Arg3>(arg3),
2893 std::forward<Arg4>(arg4)};
2907 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2908 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2910 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2911 BoundArg4, BoundArg5, FreeArgs...)
const,
2918 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2938 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2939 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2941 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2942 BoundArg4, BoundArg5, FreeArgs...)
const,
2943 const BoundArg1& arg1,
2944 const BoundArg2& arg2,
2945 const BoundArg3& arg3,
2946 const BoundArg4& arg4,
2947 const BoundArg5& arg5) {
2949 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2970 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2971 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2973 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2974 BoundArg4, BoundArg5, FreeArgs...)
const,
2981 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2982 std::forward<Arg1>(arg1),
2983 std::forward<Arg2>(arg2),
2984 std::forward<Arg3>(arg3),
2985 std::forward<Arg4>(arg4),
2986 std::forward<Arg5>(arg5)};
3000 template <
class... FreeArgs>
3017 template <
class... FreeArgs>
3034 template <
class... FreeArgs>
3050 template <
class BoundArg,
class... FreeArgs>
3073 template <
class BoundArg,
class... FreeArgs>
3075 const BoundArg& arg) {
3097 template <
class BoundArg,
class Arg,
class... FreeArgs>
3100 return new Callback1_static<
true, BoundArg, FreeArgs...>{func, std::forward<Arg>(arg)};
3114 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3118 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3138 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3140 const BoundArg1& arg1,
3141 const BoundArg2& arg2) {
3142 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3163 template <
class BoundArg1,
class BoundArg2,
class Arg1,
class Arg2,
class... FreeArgs>
3168 std::forward<Arg1>(arg1),
3169 std::forward<Arg2>(arg2)};
3183 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3184 CallbackArg<FreeArgs...>*
make(
void (*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
3188 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3208 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3210 const BoundArg1& arg1,
3211 const BoundArg2& arg2,
3212 const BoundArg3& arg3) {
3213 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3234 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3235 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
3240 return new Callback3_static<
true, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func,
3241 std::forward<Arg1>(arg1),
3242 std::forward<Arg2>(arg2),
3243 std::forward<Arg3>(arg3)};
3257 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3258 class BoundArg4,
class... FreeArgs>
3260 BoundArg4, FreeArgs...),
3266 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3286 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3287 class BoundArg4,
class... FreeArgs>
3289 BoundArg4, FreeArgs...),
3290 const BoundArg1& arg1,
3291 const BoundArg2& arg2,
3292 const BoundArg3& arg3,
3293 const BoundArg4& arg4) {
3295 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3316 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
3317 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
3319 BoundArg4, FreeArgs...),
3325 BoundArg4, FreeArgs...>{func,
3326 std::forward<Arg1>(arg1),
3327 std::forward<Arg2>(arg2),
3328 std::forward<Arg3>(arg3),
3329 std::forward<Arg4>(arg4)};
3343 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3344 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3346 BoundArg4, BoundArg5, FreeArgs...),
3353 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3373 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3374 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3376 BoundArg4, BoundArg5, FreeArgs...),
3377 const BoundArg1& arg1,
3378 const BoundArg2& arg2,
3379 const BoundArg3& arg3,
3380 const BoundArg4& arg4,
3381 const BoundArg5& arg5) {
3383 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3404 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
3405 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
3407 BoundArg4, BoundArg5, FreeArgs...),
3414 BoundArg4, BoundArg5, FreeArgs...>{func,
3415 std::forward<Arg1>(arg1),
3416 std::forward<Arg2>(arg2),
3417 std::forward<Arg3>(arg3),
3418 std::forward<Arg4>(arg4),
3419 std::forward<Arg5>(arg5)};
3436 template <
class... FreeArgs>
3457 template <
class... FreeArgs>
3476 template <
class... FreeArgs>
3493 template <
class... FreeArgs>
3514 template <
class... FreeArgs>
3533 template <
class... FreeArgs>
3575 template <
class... FreeArgs,
class Lambda>
3577 return new Callback_lambda<Lambda, FreeArgs...>{std::forward<Lambda>(l)};
3607 void post(
const Callback* cb, gint priority = G_PRIORITY_DEFAULT_IDLE,
3608 GMainContext* context = 0);
3654 gint priority = G_PRIORITY_DEFAULT_IDLE, GMainContext* context = 0);