Just if anybody wants / needs to know how to modify @Krux02 original code to automatically use a converter and therefor hiding more of the implementation details.
Simply replace the lines from `let castIdent = ...` to the end of the file with: # instead of let castIdent = ... let converterIdent = newIdentNode($interfaceName.symbol & "Converter") result.add quote do: converter `converterIdent`(this: var `implementationCandidateName`) : `interfaceName` = `interfaceName`( objet : this.addr, vtable : `vtableValueSymbol`.unsafeAddr ) The example can simply call `foobar(a)` and `foobar(b)` after this modification.