| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
August 15, 2005 Variadic opIndexAssign | ||||
|---|---|---|---|---|
| ||||
Hi,
I'm using a variadic version of opIndexAssign, and it seems to work. I dunno if this is a hack or not, but what the heck. In addition, I'm using std.boxer internally. The problem is that I can't streamline the parameter-to-box conversion. Here's an example:
# import std.boxer;
# alias char[] string;
#
# class Test {
# private Box[string] m_Boxes;
# void opIndexAssign(...) in {
# assert(_arguments.length == 2);
# assert(_arguments[1] == typeid(string));
# } body {
# // The parameter I want to box is _arguments[0].
# Box b = box(std.stdarg.va_arg!(__UNKNOWN__)(_argptr));
# string id = std.stdarg.va_arg!(string)(_argptr);
# m_Boxes[id] = b;
# }
# }
My question is, what do I put in __UNKNOWN__?
Plan B is to do a manual type-by-type test, like:
# if (_arguments[0] == typeid(int))
# b = box(va_arg!(int)(_argptr));
# else if (_arguments[0] == typeid(char))
# b = box(va_arg!(char)(_argptr));
But this would really suck, as it ruins the whole thing. Surely there's a way to automate that bit of nastiness so that I can do something like:
# b = box(va_arg!(typeof(typeid(_arguments[0])))(_argptr));
Right?
Thanks a ton for the help.
--AJG.
| ||||
August 15, 2005 Re: Variadic opIndexAssign | ||||
|---|---|---|---|---|
| ||||
Posted in reply to AJG | > # // The parameter I want to box is _arguments[0].
> # Box b = box(std.stdarg.va_arg!(__UNKNOWN__)(_argptr));
something like
Box b = box(_arguments[0],_argptr);
_argptr += (_arguments[0].tsize() + int.sizeof - 1) & ~(int.sizeof - 1);
Someone really should put that argptr increment in a standard place. It's come up twice recently...
| |||
August 15, 2005 Re: Variadic opIndexAssign | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | Hi, >something like > > Box b = box(_arguments[0],_argptr); Nice! :) > _argptr += (_arguments[0].tsize() + int.sizeof - 1) & ~(int.sizeof - 1); I don't get this part. How come the example in the docs doesn't do that? >Someone really should put that argptr increment in a standard place. It's come up twice recently... Thanks! --AJG. | |||
August 15, 2005 Re: Variadic opIndexAssign | ||||
|---|---|---|---|---|
| ||||
Posted in reply to AJG | >> _argptr += (_arguments[0].tsize() + int.sizeof - 1) & ~(int.sizeof - 1); >I don't get this part. How come the example in the docs doesn't do that? Oh, nevermind. I'm a doofus. It's because you didn't use the template macro to get the arg. Right? >>Someone really should put that argptr increment in a standard place. It's come up twice recently... Yes, this seems like a good idea. Cheers, --AJG. | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply