digitalmars.D.learn - Function template as template parameter
- Andrey Zherikov (13/13) Dec 11 2022 I have this (very simplified) code:
- Salih Dincer (25/28) Dec 11 2022 I can't quite understand the question, this already works:
- =?UTF-8?Q?Ali_=c3=87ehreli?= (20/24) Dec 11 2022 I think the OP is trying to create an anonymous template. I don't think
- Andrey Zherikov (3/16) Dec 11 2022 Thanks for confirming this.
I have this (very simplified) code: ```d void foo(alias callback)() { callback!5; } static void print(int i)() { writeln(i); } foo!print; ``` Is there a way to merge two last lines into one of a form like `foo!(...something...)`? Note that callback parameter must be compile-time parameter as it represents a member of a type during introspection done by `foo`.
Dec 11 2022
On Sunday, 11 December 2022 at 09:43:34 UTC, Andrey Zherikov wrote:Note that callback parameter must be compile-time parameter as it represents a member of a type during introspection done by `foo`.I can't quite understand the question, this already works: ```d void foo(alias callback)() { import std.stdio : writefln; callback.writefln!"%s"; } void main() { auto i = [ 1, 2, 3 ]; auto s = ["foo", "bar", "zoo"]; foo!i; foo!s; foo!"hello, world!"; enum a = 11, b = 22; foo!(a + b); } /* [1, 2, 3] ["foo", "bar", "zoo"] hello, world! 33 */ ```
Dec 11 2022
On 12/11/22 05:54, Salih Dincer wrote:On Sunday, 11 December 2022 at 09:43:34 UTC, Andrey Zherikov wrote:I think the OP is trying to create an anonymous template. I don't think it's possible. The following works because the template has the name 'print': // Named template: static void print(int i)() { import std; writeln(i); } void main() { foo!print; } The following does not work when one attempts to use the template anonymously. Just trying to pass a template just like a lambda: foo!((int i)() { import std; writeln(i); }); Note how '(int i)()' is hoping to define a template. AliNote that callback parameter must be compile-time parameter as it represents a member of a type during introspection done by `foo`.I can't quite understand the question, this already works:
Dec 11 2022
On Sunday, 11 December 2022 at 16:24:30 UTC, Ali Çehreli wrote:On 12/11/22 05:54, Salih Dincer wrote:YesOn Sunday, 11 December 2022 at 09:43:34 UTC, Andrey Zherikovwrote:as itNote that callback parameter must be compile-time parameter`foo`.represents a member of a type during introspection done byI can't quite understand the question, this already works:I think the OP is trying to create an anonymous template.The following does not work when one attempts to use the template anonymously. Just trying to pass a template just like a lambdaThanks for confirming this.
Dec 11 2022