Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.73 KB | None | 0 0
  1. const std = @import("std");
  2. const builtin = @import("builtin");
  3.  
  4. fn foo(n: usize) usize {
  5.     return n * 10;
  6. }
  7.  
  8. fn makefunc(comptime func: var) @typeOf(func) {
  9.     const TargetFnType = @typeOf(func);
  10.     const target_fn_info = @typeInfo(TargetFnType).Fn;
  11.     const args = target_fn_info.args;
  12.  
  13.     return struct {
  14.         fn call(n: args[0].arg_type.?) TargetFnType.ReturnType {
  15.             std.debug.warn("calling a function\n");
  16.             std.debug.warn("{}\n", n);
  17.  
  18.             return func(n);
  19.         }
  20.     }.call;
  21. }
  22.  
  23. const decorated = makefunc(foo);
  24. const doubledecorated = makefunc(decorated);
  25.  
  26. pub fn main() void {
  27.  
  28.     //std.debug.warn("{}\n", decorated(10));
  29.     std.debug.warn("{}\n", doubledecorated(10));
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement