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
1255 template <
class... FreeArgs>
class FunctorArg;
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>
1451 if (cb_s.
get()) cb_s->dispatch(args...);
1542 template <
class... FreeArgs>
1557 if (cb_s.
get()) cb_s->dispatch(args...);
1638 template <
class T,
class... FreeArgs>
1647 (obj->*func)(free_args...);
1652 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1655 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...);
1662 (obj->*func)(arg, free_args...);
1664 template <
class Arg>
1666 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1669 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1672 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...);
1680 (obj->*func)(arg1, arg2, free_args...);
1682 template <
class Arg1,
class Arg2>
1685 Arg2&& arg2_): obj(&obj_), func(func_),
1686 arg1(std::forward<Arg1>(arg1_)),
1687 arg2(std::forward<Arg2>(arg2_)) {}
1690 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1693 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1702 (obj->*func)(arg1, arg2, arg3, free_args...);
1704 template <
class Arg1,
class Arg2,
class Arg3>
1709 obj(&obj_), func(func_),
1710 arg1(std::forward<Arg1>(arg1_)),
1711 arg2(std::forward<Arg2>(arg2_)),
1712 arg3(std::forward<Arg3>(arg3_)) {}
1715 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1716 class BoundArg4,
class... FreeArgs>
1719 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
1729 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1731 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1737 obj(&obj_), func(func_),
1738 arg1(std::forward<Arg1>(arg1_)),
1739 arg2(std::forward<Arg2>(arg2_)),
1740 arg3(std::forward<Arg3>(arg3_)),
1741 arg4(std::forward<Arg4>(arg4_)) {}
1744 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1745 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1748 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1749 BoundArg4, BoundArg5, FreeArgs...);
1760 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1762 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1769 obj(&obj_), func(func_),
1770 arg1(std::forward<Arg1>(arg1_)),
1771 arg2(std::forward<Arg2>(arg2_)),
1772 arg3(std::forward<Arg3>(arg3_)),
1773 arg4(std::forward<Arg4>(arg4_)),
1774 arg5(std::forward<Arg5>(arg5_)) {}
1779 template <
class T,
class... FreeArgs>
1788 (obj->*func)(free_args...);
1793 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1796 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...)
const;
1803 (obj->*func)(arg, free_args...);
1805 template <
class Arg>
1807 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1810 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1813 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...)
const;
1821 (obj->*func)(arg1, arg2, free_args...);
1823 template <
class Arg1,
class Arg2>
1826 Arg2&& arg2_): obj(&obj_), func(func_),
1827 arg1(std::forward<Arg1>(arg1_)),
1828 arg2(std::forward<Arg2>(arg2_)) {}
1831 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1834 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const;
1843 (obj->*func)(arg1, arg2, arg3, free_args...);
1845 template <
class Arg1,
class Arg2,
class Arg3>
1850 obj(&obj_), func(func_),
1851 arg1(std::forward<Arg1>(arg1_)),
1852 arg2(std::forward<Arg2>(arg2_)),
1853 arg3(std::forward<Arg3>(arg3_)) {}
1856 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1857 class BoundArg4,
class... FreeArgs>
1860 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
const;
1870 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1872 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1878 obj(&obj_), func(func_),
1879 arg1(std::forward<Arg1>(arg1_)),
1880 arg2(std::forward<Arg2>(arg2_)),
1881 arg3(std::forward<Arg3>(arg3_)),
1882 arg4(std::forward<Arg4>(arg4_)) {}
1885 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1886 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1889 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1890 BoundArg4, BoundArg5, FreeArgs...)
const;
1901 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1903 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1910 obj(&obj_), func(func_),
1911 arg1(std::forward<Arg1>(arg1_)),
1912 arg2(std::forward<Arg2>(arg2_)),
1913 arg3(std::forward<Arg3>(arg3_)),
1914 arg4(std::forward<Arg4>(arg4_)),
1915 arg5(std::forward<Arg5>(arg5_)) {}
1920 template <
class... FreeArgs>
1933 template <
bool unref,
class BoundArg,
class... FreeArgs>
1936 typedef void (*
Func)(BoundArg, FreeArgs...);
1942 func(arg, free_args...);
1944 template <
class Arg>
1948 template <
bool unref,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1951 typedef void (*
Func)(BoundArg1, BoundArg2, FreeArgs...);
1958 func(arg1, arg2, free_args...);
1960 template <
class Arg1,
class Arg2>
1962 Arg2&& arg2_): func(func_),
1963 arg1(std::forward<Arg1>(arg1_)),
1964 arg2(std::forward<Arg2>(arg2_)) {}
1967 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1970 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1978 func(arg1, arg2, arg3, free_args...);
1980 template <
class Arg1,
class Arg2,
class Arg3>
1986 arg1(std::forward<Arg1>(arg1_)),
1987 arg2(std::forward<Arg2>(arg2_)),
1988 arg3(std::forward<Arg3>(arg3_)) {}
1991 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1992 class BoundArg4,
class... FreeArgs>
1995 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
2004 func(arg1, arg2, arg3, arg4, free_args...);
2006 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
2013 arg1(std::forward<Arg1>(arg1_)),
2014 arg2(std::forward<Arg2>(arg2_)),
2015 arg3(std::forward<Arg3>(arg3_)),
2016 arg4(std::forward<Arg4>(arg4_)) {}
2019 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2020 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2023 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3,
2024 BoundArg4, BoundArg5, FreeArgs...);
2034 func(arg1, arg2, arg3, arg4, arg5, free_args...);
2036 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
2044 arg1(std::forward<Arg1>(arg1_)),
2045 arg2(std::forward<Arg2>(arg2_)),
2046 arg3(std::forward<Arg3>(arg3_)),
2047 arg4(std::forward<Arg4>(arg4_)),
2048 arg5(std::forward<Arg5>(arg5_)) {}
2059 template <
class... FreeArgs>
2061 std::function<void(FreeArgs...)> f;
2069 template <
class Lambda,
class... FreeArgs>
2094 template <
class T,
class... FreeArgs>
2096 void (T::*func)(FreeArgs...)) {
2097 return new Callback0<T, FreeArgs...>{t, func};
2112 template <
class T,
class... FreeArgs>
2114 void (T::*func)(FreeArgs...)) {
2115 return new Callback0<T, FreeArgs...>{t, func};
2130 template <
class T,
class... FreeArgs>
2132 void (T::*func)(FreeArgs...)) {
2133 return new Callback0<T, FreeArgs...>{t, func};
2147 template <
class T,
class BoundArg,
class... FreeArgs>
2149 void (T::*func)(BoundArg, FreeArgs...),
2151 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2171 template <
class T,
class BoundArg,
class... FreeArgs>
2173 void (T::*func)(BoundArg, FreeArgs...),
2174 const BoundArg& arg) {
2175 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2196 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2198 void (T::*func)(BoundArg, FreeArgs...),
2200 return new Callback1<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2214 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2216 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2219 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2239 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2241 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2242 const BoundArg1& arg1,
2243 const BoundArg2& arg2) {
2244 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2265 template <
class T,
class BoundArg1,
class BoundArg2,
2266 class Arg1,
class Arg2,
class... FreeArgs>
2268 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2271 return new Callback2<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2272 std::forward<Arg1>(arg1),
2273 std::forward<Arg2>(arg2)};
2287 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2289 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2293 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2313 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2315 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2316 const BoundArg1& arg1,
2317 const BoundArg2& arg2,
2318 const BoundArg3& arg3) {
2319 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2340 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2341 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2343 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2347 return new Callback3<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2348 std::forward<Arg1>(arg1),
2349 std::forward<Arg2>(arg2),
2350 std::forward<Arg3>(arg3)};
2364 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2365 class BoundArg4,
class... FreeArgs>
2367 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2368 BoundArg4, FreeArgs...),
2373 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2374 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2394 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2395 class BoundArg4,
class... FreeArgs>
2397 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2398 BoundArg4, FreeArgs...),
2399 const BoundArg1& arg1,
2400 const BoundArg2& arg2,
2401 const BoundArg3& arg3,
2402 const BoundArg4& arg4) {
2403 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2404 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2425 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2426 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2428 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2429 BoundArg4, FreeArgs...),
2434 return new Callback4<
true, T, BoundArg1, BoundArg2, BoundArg3,
2435 BoundArg4, FreeArgs...>{t, func,
2436 std::forward<Arg1>(arg1),
2437 std::forward<Arg2>(arg2),
2438 std::forward<Arg3>(arg3),
2439 std::forward<Arg4>(arg4)};
2453 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2454 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2456 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2457 BoundArg4, BoundArg5, FreeArgs...),
2463 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2464 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2484 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2485 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2487 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2488 BoundArg4, BoundArg5, FreeArgs...),
2489 const BoundArg1& arg1,
2490 const BoundArg2& arg2,
2491 const BoundArg3& arg3,
2492 const BoundArg4& arg4,
2493 const BoundArg5& arg5) {
2494 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2495 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2516 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2517 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2519 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2520 BoundArg4, BoundArg5, FreeArgs...),
2526 return new Callback5<
true, T, BoundArg1, BoundArg2, BoundArg3,
2527 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2528 std::forward<Arg1>(arg1),
2529 std::forward<Arg2>(arg2),
2530 std::forward<Arg3>(arg3),
2531 std::forward<Arg4>(arg4),
2532 std::forward<Arg5>(arg5)};
2546 template <
class T,
class... FreeArgs>
2548 void (T::*func)(FreeArgs...)
const) {
2564 template <
class T,
class... FreeArgs>
2566 void (T::*func)(FreeArgs...)
const) {
2582 template <
class T,
class... FreeArgs>
2584 void (T::*func)(FreeArgs...)
const) {
2599 template <
class T,
class BoundArg,
class... FreeArgs>
2601 void (T::*func)(BoundArg, FreeArgs...)
const,
2603 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2623 template <
class T,
class BoundArg,
class... FreeArgs>
2625 void (T::*func)(BoundArg, FreeArgs...)
const,
2626 const BoundArg& arg) {
2627 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2648 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2650 void (T::*func)(BoundArg, FreeArgs...)
const,
2652 return new Callback1_const<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2666 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2668 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2671 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2691 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2693 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2694 const BoundArg1& arg1,
2695 const BoundArg2& arg2) {
2696 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2717 template <
class T,
class BoundArg1,
class BoundArg2,
2718 class Arg1,
class Arg2,
class... FreeArgs>
2720 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2723 return new Callback2_const<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2724 std::forward<Arg1>(arg1),
2725 std::forward<Arg2>(arg2)};
2739 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2741 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2745 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2765 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2767 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2768 const BoundArg1& arg1,
2769 const BoundArg2& arg2,
2770 const BoundArg3& arg3) {
2771 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2792 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2793 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2795 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2799 return new Callback3_const<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2800 std::forward<Arg1>(arg1),
2801 std::forward<Arg2>(arg2),
2802 std::forward<Arg3>(arg3)};
2816 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2817 class BoundArg4,
class... FreeArgs>
2819 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2820 BoundArg4, FreeArgs...)
const,
2826 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2846 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2847 class BoundArg4,
class... FreeArgs>
2849 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2850 BoundArg4, FreeArgs...)
const,
2851 const BoundArg1& arg1,
2852 const BoundArg2& arg2,
2853 const BoundArg3& arg3,
2854 const BoundArg4& arg4) {
2856 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2877 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2878 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2880 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2881 BoundArg4, FreeArgs...)
const,
2887 BoundArg4, FreeArgs...>{t, func,
2888 std::forward<Arg1>(arg1),
2889 std::forward<Arg2>(arg2),
2890 std::forward<Arg3>(arg3),
2891 std::forward<Arg4>(arg4)};
2905 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2906 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2908 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2909 BoundArg4, BoundArg5, FreeArgs...)
const,
2916 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2936 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2937 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2939 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2940 BoundArg4, BoundArg5, FreeArgs...)
const,
2941 const BoundArg1& arg1,
2942 const BoundArg2& arg2,
2943 const BoundArg3& arg3,
2944 const BoundArg4& arg4,
2945 const BoundArg5& arg5) {
2947 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2968 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2969 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2971 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2972 BoundArg4, BoundArg5, FreeArgs...)
const,
2979 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2980 std::forward<Arg1>(arg1),
2981 std::forward<Arg2>(arg2),
2982 std::forward<Arg3>(arg3),
2983 std::forward<Arg4>(arg4),
2984 std::forward<Arg5>(arg5)};
2998 template <
class... FreeArgs>
3015 template <
class... FreeArgs>
3032 template <
class... FreeArgs>
3048 template <
class BoundArg,
class... FreeArgs>
3071 template <
class BoundArg,
class... FreeArgs>
3073 const BoundArg& arg) {
3095 template <
class BoundArg,
class Arg,
class... FreeArgs>
3098 return new Callback1_static<
true, BoundArg, FreeArgs...>{func, std::forward<Arg>(arg)};
3112 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3116 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3136 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3138 const BoundArg1& arg1,
3139 const BoundArg2& arg2) {
3140 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3161 template <
class BoundArg1,
class BoundArg2,
class Arg1,
class Arg2,
class... FreeArgs>
3166 std::forward<Arg1>(arg1),
3167 std::forward<Arg2>(arg2)};
3181 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3182 CallbackArg<FreeArgs...>*
make(
void (*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
3186 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3206 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3208 const BoundArg1& arg1,
3209 const BoundArg2& arg2,
3210 const BoundArg3& arg3) {
3211 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3232 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3233 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
3238 return new Callback3_static<
true, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func,
3239 std::forward<Arg1>(arg1),
3240 std::forward<Arg2>(arg2),
3241 std::forward<Arg3>(arg3)};
3255 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3256 class BoundArg4,
class... FreeArgs>
3258 BoundArg4, FreeArgs...),
3264 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3284 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3285 class BoundArg4,
class... FreeArgs>
3287 BoundArg4, FreeArgs...),
3288 const BoundArg1& arg1,
3289 const BoundArg2& arg2,
3290 const BoundArg3& arg3,
3291 const BoundArg4& arg4) {
3293 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3314 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
3315 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
3317 BoundArg4, FreeArgs...),
3323 BoundArg4, FreeArgs...>{func,
3324 std::forward<Arg1>(arg1),
3325 std::forward<Arg2>(arg2),
3326 std::forward<Arg3>(arg3),
3327 std::forward<Arg4>(arg4)};
3341 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3342 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3344 BoundArg4, BoundArg5, FreeArgs...),
3351 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3371 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3372 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3374 BoundArg4, BoundArg5, FreeArgs...),
3375 const BoundArg1& arg1,
3376 const BoundArg2& arg2,
3377 const BoundArg3& arg3,
3378 const BoundArg4& arg4,
3379 const BoundArg5& arg5) {
3381 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3402 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
3403 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
3405 BoundArg4, BoundArg5, FreeArgs...),
3412 BoundArg4, BoundArg5, FreeArgs...>{func,
3413 std::forward<Arg1>(arg1),
3414 std::forward<Arg2>(arg2),
3415 std::forward<Arg3>(arg3),
3416 std::forward<Arg4>(arg4),
3417 std::forward<Arg5>(arg5)};
3434 template <
class... FreeArgs>
3455 template <
class... FreeArgs>
3474 template <
class... FreeArgs>
3491 template <
class... FreeArgs>
3512 template <
class... FreeArgs>
3531 template <
class... FreeArgs>
3573 template <
class... FreeArgs,
class Lambda>
3575 return new Callback_lambda<Lambda, FreeArgs...>{std::forward<Lambda>(l)};
3605 void post(
const Callback* cb, gint priority = G_PRIORITY_DEFAULT_IDLE,
3606 GMainContext* context = 0);
3642 gint priority = G_PRIORITY_DEFAULT_IDLE, GMainContext* context = 0);