39 #ifndef CGU_CALLBACK_H
40 #define CGU_CALLBACK_H
1132 #include <functional>
1206 template <
class... FreeArgs>
1246 #ifdef CGU_USE_GLIB_MEMORY_SLICES_NO_COMPAT
1253 template <
class... FreeArgs>
class FunctorArg;
1267 template <
class... T>
1269 return (f1.cb_s.get() == f2.cb_s.get());
1277 template <
class... T>
1293 template <
class... T>
1295 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
1303 template <
class... T>
1305 return (f1.cb_s.get() == f2.cb_s.get());
1313 template <
class... T>
1324 template <
class... T>
1326 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
1335 #ifndef DOXYGEN_PARSING
1340 template <
class... T>
1341 struct hash<Cgu::Callback::FunctorArg<T...>> {
1342 typedef std::size_t result_type;
1344 result_type operator()(
const argument_type& f)
const {
1351 template <
class... T>
1352 struct hash<Cgu::Callback::SafeFunctorArg<T...>> {
1353 typedef std::size_t result_type;
1355 result_type operator()(
const argument_type& f)
const {
1364 #endif // DOXYGEN_PARSING
1425 template <
class... FreeArgs>
1449 if (cb_s.
get()) cb_s->dispatch(args...);
1540 template <
class... FreeArgs>
1555 if (cb_s.
get()) cb_s->dispatch(args...);
1636 template <
class T,
class... FreeArgs>
1645 (obj->*func)(free_args...);
1650 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1653 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...);
1660 (obj->*func)(arg, free_args...);
1662 template <
class Arg>
1664 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1667 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1670 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...);
1678 (obj->*func)(arg1, arg2, free_args...);
1680 template <
class Arg1,
class Arg2>
1683 Arg2&& arg2_): obj(&obj_), func(func_),
1684 arg1(std::forward<Arg1>(arg1_)),
1685 arg2(std::forward<Arg2>(arg2_)) {}
1688 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1691 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1700 (obj->*func)(arg1, arg2, arg3, free_args...);
1702 template <
class Arg1,
class Arg2,
class Arg3>
1707 obj(&obj_), func(func_),
1708 arg1(std::forward<Arg1>(arg1_)),
1709 arg2(std::forward<Arg2>(arg2_)),
1710 arg3(std::forward<Arg3>(arg3_)) {}
1713 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1714 class BoundArg4,
class... FreeArgs>
1717 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
1727 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1729 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1735 obj(&obj_), func(func_),
1736 arg1(std::forward<Arg1>(arg1_)),
1737 arg2(std::forward<Arg2>(arg2_)),
1738 arg3(std::forward<Arg3>(arg3_)),
1739 arg4(std::forward<Arg4>(arg4_)) {}
1742 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1743 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1746 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1747 BoundArg4, BoundArg5, FreeArgs...);
1758 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1760 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1767 obj(&obj_), func(func_),
1768 arg1(std::forward<Arg1>(arg1_)),
1769 arg2(std::forward<Arg2>(arg2_)),
1770 arg3(std::forward<Arg3>(arg3_)),
1771 arg4(std::forward<Arg4>(arg4_)),
1772 arg5(std::forward<Arg5>(arg5_)) {}
1777 template <
class T,
class... FreeArgs>
1786 (obj->*func)(free_args...);
1791 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1794 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...)
const;
1801 (obj->*func)(arg, free_args...);
1803 template <
class Arg>
1805 Arg&& arg_): obj(&obj_), func(func_), arg(std::forward<Arg>(arg_)) {}
1808 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1811 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...)
const;
1819 (obj->*func)(arg1, arg2, free_args...);
1821 template <
class Arg1,
class Arg2>
1824 Arg2&& arg2_): obj(&obj_), func(func_),
1825 arg1(std::forward<Arg1>(arg1_)),
1826 arg2(std::forward<Arg2>(arg2_)) {}
1829 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1832 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const;
1841 (obj->*func)(arg1, arg2, arg3, free_args...);
1843 template <
class Arg1,
class Arg2,
class Arg3>
1848 obj(&obj_), func(func_),
1849 arg1(std::forward<Arg1>(arg1_)),
1850 arg2(std::forward<Arg2>(arg2_)),
1851 arg3(std::forward<Arg3>(arg3_)) {}
1854 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1855 class BoundArg4,
class... FreeArgs>
1858 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
const;
1868 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1870 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1876 obj(&obj_), func(func_),
1877 arg1(std::forward<Arg1>(arg1_)),
1878 arg2(std::forward<Arg2>(arg2_)),
1879 arg3(std::forward<Arg3>(arg3_)),
1880 arg4(std::forward<Arg4>(arg4_)) {}
1883 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1884 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1887 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1888 BoundArg4, BoundArg5, FreeArgs...)
const;
1899 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1901 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1908 obj(&obj_), func(func_),
1909 arg1(std::forward<Arg1>(arg1_)),
1910 arg2(std::forward<Arg2>(arg2_)),
1911 arg3(std::forward<Arg3>(arg3_)),
1912 arg4(std::forward<Arg4>(arg4_)),
1913 arg5(std::forward<Arg5>(arg5_)) {}
1918 template <
class... FreeArgs>
1931 template <
bool unref,
class BoundArg,
class... FreeArgs>
1934 typedef void (*
Func)(BoundArg, FreeArgs...);
1940 func(arg, free_args...);
1942 template <
class Arg>
1946 template <
bool unref,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1949 typedef void (*
Func)(BoundArg1, BoundArg2, FreeArgs...);
1956 func(arg1, arg2, free_args...);
1958 template <
class Arg1,
class Arg2>
1960 Arg2&& arg2_): func(func_),
1961 arg1(std::forward<Arg1>(arg1_)),
1962 arg2(std::forward<Arg2>(arg2_)) {}
1965 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1968 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1976 func(arg1, arg2, arg3, free_args...);
1978 template <
class Arg1,
class Arg2,
class Arg3>
1984 arg1(std::forward<Arg1>(arg1_)),
1985 arg2(std::forward<Arg2>(arg2_)),
1986 arg3(std::forward<Arg3>(arg3_)) {}
1989 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1990 class BoundArg4,
class... FreeArgs>
1993 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
2002 func(arg1, arg2, arg3, arg4, free_args...);
2004 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
2011 arg1(std::forward<Arg1>(arg1_)),
2012 arg2(std::forward<Arg2>(arg2_)),
2013 arg3(std::forward<Arg3>(arg3_)),
2014 arg4(std::forward<Arg4>(arg4_)) {}
2017 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2018 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2021 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3,
2022 BoundArg4, BoundArg5, FreeArgs...);
2032 func(arg1, arg2, arg3, arg4, arg5, free_args...);
2034 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
2042 arg1(std::forward<Arg1>(arg1_)),
2043 arg2(std::forward<Arg2>(arg2_)),
2044 arg3(std::forward<Arg3>(arg3_)),
2045 arg4(std::forward<Arg4>(arg4_)),
2046 arg5(std::forward<Arg5>(arg5_)) {}
2057 template <
class... FreeArgs>
2059 std::function<void(FreeArgs...)> f;
2067 template <
class Lambda,
class... FreeArgs>
2092 template <
class T,
class... FreeArgs>
2094 void (T::*func)(FreeArgs...)) {
2095 return new Callback0<T, FreeArgs...>{t, func};
2110 template <
class T,
class... FreeArgs>
2112 void (T::*func)(FreeArgs...)) {
2113 return new Callback0<T, FreeArgs...>{t, func};
2128 template <
class T,
class... FreeArgs>
2130 void (T::*func)(FreeArgs...)) {
2131 return new Callback0<T, FreeArgs...>{t, func};
2145 template <
class T,
class BoundArg,
class... FreeArgs>
2147 void (T::*func)(BoundArg, FreeArgs...),
2149 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2169 template <
class T,
class BoundArg,
class... FreeArgs>
2171 void (T::*func)(BoundArg, FreeArgs...),
2172 const BoundArg& arg) {
2173 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2194 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2196 void (T::*func)(BoundArg, FreeArgs...),
2198 return new Callback1<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2212 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2214 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2217 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2237 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2239 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2240 const BoundArg1& arg1,
2241 const BoundArg2& arg2) {
2242 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2263 template <
class T,
class BoundArg1,
class BoundArg2,
2264 class Arg1,
class Arg2,
class... FreeArgs>
2266 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
2269 return new Callback2<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2270 std::forward<Arg1>(arg1),
2271 std::forward<Arg2>(arg2)};
2285 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2287 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2291 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2311 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2313 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2314 const BoundArg1& arg1,
2315 const BoundArg2& arg2,
2316 const BoundArg3& arg3) {
2317 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2338 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2339 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2341 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2345 return new Callback3<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2346 std::forward<Arg1>(arg1),
2347 std::forward<Arg2>(arg2),
2348 std::forward<Arg3>(arg3)};
2362 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2363 class BoundArg4,
class... FreeArgs>
2365 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2366 BoundArg4, FreeArgs...),
2371 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2372 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2392 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2393 class BoundArg4,
class... FreeArgs>
2395 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2396 BoundArg4, FreeArgs...),
2397 const BoundArg1& arg1,
2398 const BoundArg2& arg2,
2399 const BoundArg3& arg3,
2400 const BoundArg4& arg4) {
2401 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
2402 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2423 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2424 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2426 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2427 BoundArg4, FreeArgs...),
2432 return new Callback4<
true, T, BoundArg1, BoundArg2, BoundArg3,
2433 BoundArg4, FreeArgs...>{t, func,
2434 std::forward<Arg1>(arg1),
2435 std::forward<Arg2>(arg2),
2436 std::forward<Arg3>(arg3),
2437 std::forward<Arg4>(arg4)};
2451 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2452 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2454 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2455 BoundArg4, BoundArg5, FreeArgs...),
2461 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2462 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2482 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2483 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2485 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2486 BoundArg4, BoundArg5, FreeArgs...),
2487 const BoundArg1& arg1,
2488 const BoundArg2& arg2,
2489 const BoundArg3& arg3,
2490 const BoundArg4& arg4,
2491 const BoundArg5& arg5) {
2492 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2493 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2514 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2515 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2517 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2518 BoundArg4, BoundArg5, FreeArgs...),
2524 return new Callback5<
true, T, BoundArg1, BoundArg2, BoundArg3,
2525 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2526 std::forward<Arg1>(arg1),
2527 std::forward<Arg2>(arg2),
2528 std::forward<Arg3>(arg3),
2529 std::forward<Arg4>(arg4),
2530 std::forward<Arg5>(arg5)};
2544 template <
class T,
class... FreeArgs>
2546 void (T::*func)(FreeArgs...)
const) {
2562 template <
class T,
class... FreeArgs>
2564 void (T::*func)(FreeArgs...)
const) {
2580 template <
class T,
class... FreeArgs>
2582 void (T::*func)(FreeArgs...)
const) {
2597 template <
class T,
class BoundArg,
class... FreeArgs>
2599 void (T::*func)(BoundArg, FreeArgs...)
const,
2601 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2621 template <
class T,
class BoundArg,
class... FreeArgs>
2623 void (T::*func)(BoundArg, FreeArgs...)
const,
2624 const BoundArg& arg) {
2625 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2646 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2648 void (T::*func)(BoundArg, FreeArgs...)
const,
2650 return new Callback1_const<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2664 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2666 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2669 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2689 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2691 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2692 const BoundArg1& arg1,
2693 const BoundArg2& arg2) {
2694 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2715 template <
class T,
class BoundArg1,
class BoundArg2,
2716 class Arg1,
class Arg2,
class... FreeArgs>
2718 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2721 return new Callback2_const<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2722 std::forward<Arg1>(arg1),
2723 std::forward<Arg2>(arg2)};
2737 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2739 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2743 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2763 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2765 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2766 const BoundArg1& arg1,
2767 const BoundArg2& arg2,
2768 const BoundArg3& arg3) {
2769 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2790 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2791 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2793 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2797 return new Callback3_const<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2798 std::forward<Arg1>(arg1),
2799 std::forward<Arg2>(arg2),
2800 std::forward<Arg3>(arg3)};
2814 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2815 class BoundArg4,
class... FreeArgs>
2817 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2818 BoundArg4, FreeArgs...)
const,
2824 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2844 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2845 class BoundArg4,
class... FreeArgs>
2847 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2848 BoundArg4, FreeArgs...)
const,
2849 const BoundArg1& arg1,
2850 const BoundArg2& arg2,
2851 const BoundArg3& arg3,
2852 const BoundArg4& arg4) {
2854 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2875 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2876 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2878 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2879 BoundArg4, FreeArgs...)
const,
2885 BoundArg4, FreeArgs...>{t, func,
2886 std::forward<Arg1>(arg1),
2887 std::forward<Arg2>(arg2),
2888 std::forward<Arg3>(arg3),
2889 std::forward<Arg4>(arg4)};
2903 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2904 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2906 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2907 BoundArg4, BoundArg5, FreeArgs...)
const,
2914 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2934 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2935 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2937 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2938 BoundArg4, BoundArg5, FreeArgs...)
const,
2939 const BoundArg1& arg1,
2940 const BoundArg2& arg2,
2941 const BoundArg3& arg3,
2942 const BoundArg4& arg4,
2943 const BoundArg5& arg5) {
2945 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2966 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2967 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2969 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2970 BoundArg4, BoundArg5, FreeArgs...)
const,
2977 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2978 std::forward<Arg1>(arg1),
2979 std::forward<Arg2>(arg2),
2980 std::forward<Arg3>(arg3),
2981 std::forward<Arg4>(arg4),
2982 std::forward<Arg5>(arg5)};
2996 template <
class... FreeArgs>
3013 template <
class... FreeArgs>
3030 template <
class... FreeArgs>
3046 template <
class BoundArg,
class... FreeArgs>
3069 template <
class BoundArg,
class... FreeArgs>
3071 const BoundArg& arg) {
3093 template <
class BoundArg,
class Arg,
class... FreeArgs>
3096 return new Callback1_static<
true, BoundArg, FreeArgs...>{func, std::forward<Arg>(arg)};
3110 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3114 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3134 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
3136 const BoundArg1& arg1,
3137 const BoundArg2& arg2) {
3138 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
3159 template <
class BoundArg1,
class BoundArg2,
class Arg1,
class Arg2,
class... FreeArgs>
3164 std::forward<Arg1>(arg1),
3165 std::forward<Arg2>(arg2)};
3179 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3180 CallbackArg<FreeArgs...>*
make(
void (*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
3184 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3204 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
3206 const BoundArg1& arg1,
3207 const BoundArg2& arg2,
3208 const BoundArg3& arg3) {
3209 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
3230 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3231 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
3236 return new Callback3_static<
true, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func,
3237 std::forward<Arg1>(arg1),
3238 std::forward<Arg2>(arg2),
3239 std::forward<Arg3>(arg3)};
3253 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3254 class BoundArg4,
class... FreeArgs>
3256 BoundArg4, FreeArgs...),
3262 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3282 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3283 class BoundArg4,
class... FreeArgs>
3285 BoundArg4, FreeArgs...),
3286 const BoundArg1& arg1,
3287 const BoundArg2& arg2,
3288 const BoundArg3& arg3,
3289 const BoundArg4& arg4) {
3291 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
3312 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
3313 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
3315 BoundArg4, FreeArgs...),
3321 BoundArg4, FreeArgs...>{func,
3322 std::forward<Arg1>(arg1),
3323 std::forward<Arg2>(arg2),
3324 std::forward<Arg3>(arg3),
3325 std::forward<Arg4>(arg4)};
3339 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3340 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3342 BoundArg4, BoundArg5, FreeArgs...),
3349 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3369 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
3370 class BoundArg4,
class BoundArg5,
class... FreeArgs>
3372 BoundArg4, BoundArg5, FreeArgs...),
3373 const BoundArg1& arg1,
3374 const BoundArg2& arg2,
3375 const BoundArg3& arg3,
3376 const BoundArg4& arg4,
3377 const BoundArg5& arg5) {
3379 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
3400 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
3401 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
3403 BoundArg4, BoundArg5, FreeArgs...),
3410 BoundArg4, BoundArg5, FreeArgs...>{func,
3411 std::forward<Arg1>(arg1),
3412 std::forward<Arg2>(arg2),
3413 std::forward<Arg3>(arg3),
3414 std::forward<Arg4>(arg4),
3415 std::forward<Arg5>(arg5)};
3432 template <
class... FreeArgs>
3453 template <
class... FreeArgs>
3472 template <
class... FreeArgs>
3489 template <
class... FreeArgs>
3510 template <
class... FreeArgs>
3529 template <
class... FreeArgs>
3571 template <
class... FreeArgs,
class Lambda>
3573 return new Callback_lambda<Lambda, FreeArgs...>{std::forward<Lambda>(l)};
3603 void post(
const Callback* cb, gint priority = G_PRIORITY_DEFAULT_IDLE,
3604 GMainContext* context = 0);
3640 gint priority = G_PRIORITY_DEFAULT_IDLE, GMainContext* context = 0);