diff options
author | Juan M Gómez <info@jmgomez.me> | 2023-09-14 16:37:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-14 17:37:30 +0200 |
commit | 96e1949610bc805af451903ba5cc4d483f7b4dce (patch) | |
tree | b99c6f5691beefdf76deb8f72f4302935ce922e9 /tests | |
parent | ac1804aba665b34a01cb014183f8fff0ba6db738 (diff) | |
download | Nim-96e1949610bc805af451903ba5cc4d483f7b4dce.tar.gz |
implements RFC: [C++] Constructors as default initializers (#22694)
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cpp/tinitializers.nim | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/cpp/tinitializers.nim b/tests/cpp/tinitializers.nim new file mode 100644 index 000000000..868cf825c --- /dev/null +++ b/tests/cpp/tinitializers.nim @@ -0,0 +1,33 @@ +discard """ + targets: "cpp" +""" + +{.emit:"""/*TYPESECTION*/ +struct CppStruct { + CppStruct(int x, char* y): x(x), y(y){} + void doSomething() {} + int x; + char* y; +}; +""".} +type + CppStruct {.importcpp, inheritable.} = object + ChildStruct = object of CppStruct + HasCppStruct = object + cppstruct: CppStruct + +proc constructCppStruct(a:cint = 5, b:cstring = "hello"): CppStruct {.importcpp: "CppStruct(@)", constructor.} +proc doSomething(this: CppStruct) {.importcpp.} +proc returnCppStruct(): CppStruct = discard +proc initChildStruct: ChildStruct = ChildStruct() +proc makeChildStruct(): ChildStruct {.constructor:"""ChildStruct(): CppStruct(5, "10")""".} = discard +proc initHasCppStruct(x: cint): HasCppStruct = + HasCppStruct(cppstruct: constructCppStruct(x)) + +proc main = + var hasCppStruct = initHasCppStruct(2) #generates cppstruct = { 10 } inside the struct + hasCppStruct.cppstruct.doSomething() + discard returnCppStruct() #generates result = { 10 } + discard initChildStruct() #generates ChildStruct temp ({}) bypassed with makeChildStruct + (proc (s:CppStruct) = discard)(CppStruct()) #CppStruct temp ({10}) +main() \ No newline at end of file |