digitalmars.D.learn - Variable Arguments
- Jethro (17/17) Apr 08 2017 void foo(A...)(A a)
- rikki cattermole (20/35) Apr 08 2017 A char and a string is no where near the same thing.
void foo(A...)(A a)
{
foreach(aa; a)
{
for(int i = 0; i < a.length; i++)
...
}
}
A can be strings or char, how can I easily deal with both? (e.g.,
a.length = 1 for a being a char... and also a[0] = a, so to
speak).
That is, I want chars to be treated as strings of length 1, since
I have written my code to work with strings, no reason it
shouldn't work with chars. I realize we can't use the above
notation but I can't get the type of aa because D complains it is
unknown at compile time. I could use A[k] but it requires extra
work.
Apr 08 2017
On 09/04/2017 7:30 AM, Jethro wrote:
void foo(A...)(A a)
{
foreach(aa; a)
{
for(int i = 0; i < a.length; i++)
...
}
}
A can be strings or char, how can I easily deal with both? (e.g.,
a.length = 1 for a being a char... and also a[0] = a, so to speak).
That is, I want chars to be treated as strings of length 1, since I have
written my code to work with strings, no reason it shouldn't work with
chars. I realize we can't use the above notation but I can't get the
type of aa because D complains it is unknown at compile time. I could
use A[k] but it requires extra work.
A char and a string is no where near the same thing.
A char is a single byte, a string is a array which is made up of a
pointer to a set of chars plus a length (size_t WORD size of cpu e.g.
4/8 bytes).
You would need to wrap up that input char e.g. string s =
cast(immutable)[c];
But here is what I would recommend:
void foo(char[] c...) {
string[] args;
foreach(v; c) {
args ~= cast(immutable)[c]
}
foo(args);
}
void foo(string[] s...) {
// ...
}
This will remove the need for template specialization (or "implicit"
support for e.g. wstring and dstring).
Apr 08 2017








rikki cattermole <rikki cattermole.co.nz>