digitalmars.D.learn - template in struct
- dsmith (13/13) Mar 23 2013 How to make workable something like this:
- Namespace (2/15) Mar 23 2013 You must specify the template type of S.
- John Colvin (14/27) Mar 23 2013 for a start, you have a foreach sitting in a struct declaration,
- Philippe Sigaud (8/21) Mar 23 2013 S is not a type here, but a template name. The type is S!(SomeArgs).
How to make workable something like this: struct S (T...) { T args; string arg_str; foreach(i; args) { arg_str ~ to!string(i); } } void some_function(S s) { // here ... Error: struct S(T...) is used as a type s.args = [a, b, c]; string args = s.arg_str; }
Mar 23 2013
On Saturday, 23 March 2013 at 17:08:27 UTC, dsmith wrote:How to make workable something like this: struct S (T...) { T args; string arg_str; foreach(i; args) { arg_str ~ to!string(i); } } void some_function(S s) { // here ... Error: struct S(T...) is used as a type s.args = [a, b, c]; string args = s.arg_str; }You must specify the template type of S.
Mar 23 2013
On Saturday, 23 March 2013 at 17:08:27 UTC, dsmith wrote:How to make workable something like this: struct S (T...) { T args; string arg_str; foreach(i; args) { arg_str ~ to!string(i); } } void some_function(S s) { // here ... Error: struct S(T...) is used as a type s.args = [a, b, c]; string args = s.arg_str; }for a start, you have a foreach sitting in a struct declaration, not in any constructor or method. I think what you mean is: struct S(T...) { T args string arg_str; this(T args) { foreach(i; args) arg_str ~ to!string(i); } } if you want the arg_str to be updated every time args are changed, you'll need to introduce a method (or property) for this.
Mar 23 2013
On Sat, Mar 23, 2013 at 6:08 PM, dsmith <dsmith nomail.com> wrote:How to make workable something like this: struct S (T...) { T args; string arg_str; foreach(i; args) { arg_str ~ to!string(i); } } void some_function(S s) { // here ... Error: struct S(T...) is used as a type s.args = [a, b, c]; string args = s.arg_str; }S is not a type here, but a template name. The type is S!(SomeArgs). That's what you should pass to some_function: void some_function(Args...)(S!(Args) s) { s.args = [a, b, c]; string args = s.arg_str; }
Mar 23 2013