PyObject * test(PyObject *self, PyObject *args) { FooObject *f = make_foo(42); if (NULL == f) { return NULL; /* we assume an exception was set by make_foo() */ } Py_DECREF(f); Py_RETURN_NONE; }
int main(void) { struct object *p; struct methods *mtable; void (*p_reset) (struct object *self); int (*p_twiddle) (struct object *self, int i); int i; /* Create a [foo] object */ p = make_foo(); /* Do a dynamic method call to the [reset] method */ mtable = p->mtable; p_reset = mtable->reset; p_reset(p); /* Do a dynamic method call to the [twiddle] method */ mtable = p->mtable; p_twiddle = mtable->twiddle; i = p_twiddle(p,3); /* Done. */ return i; }
int main() { auto x = make_foo(); }
int main() { f = make_foo([] { return 42; }); return f.func(); }
#include <utility> template<typename Func> struct foo { Func func; }; template<typename Func> foo<Func> make_foo(Func func) { return { std::move(func) }; } auto f = make_foo([] { }); int main() { f = make_foo([] { return 42; }); return f.func(); }
int main() { make_foo(1 + 1); make_foo2(1 + 1); }
DEF_TEST(sk_make_sp, r) { auto x = make_foo(); }