out default argument of void
Ali Çehreli
acehreli at yahoo.com
Wed Jan 4 15:19:59 PST 2012
On 01/04/2012 02:19 PM, Caligo wrote:
> I have a function that looks something like this:
>
> bool fun(double theta, out A a, out B b, out C c){ /* ... */ }
>
> if fun() returns false, then nothing is supposed to be assigned to a,
> b, c. If it returns true, then values are assigned to a, b, c. Also,
> there are two ways to call fun(): If I'm interested in the return
> value only, then
>
> 1. fun(theta);
>
> otherwise,
>
> 2. fun(theta, a, b, c);
How about providing the results always as return values:
import std.exception;
alias int A;
alias int B;
alias int C;
bool fun(double)
{
return true;
}
struct ABC
{
A a;
B b;
C c;
}
struct FunResult
{
ABC * abc;
@property bool isValid() const
{
return abc !is null;
}
@property A a() const
{
enforce(abc);
return abc.a;
}
// etc.
}
FunResult funWithResult(double)
{
return FunResult(new ABC);
}
void main()
{
auto isValid = fun(1.1);
auto result = funWithResult(2.2);
if (result.isValid) {
auto use = result.a;
}
}
Ali
More information about the Digitalmars-d-learn
mailing list