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









"Namespace" <rswhite4 googlemail.com> 