Thread overview
function shadowed
Apr 08, 2015
ddos
Apr 08, 2015
anonymous
Apr 08, 2015
ddos
Apr 09, 2015
bearophile
Apr 09, 2015
anonymous
Apr 09, 2015
ddos
April 08, 2015
i got two modules
opengvg.d and vg.d

vg.d contains calls to external c functions
openvg.d should wrap and simplify some of those calls

in openvg.d i make public import of submodule vg.d
such that if openvg.d is imported the functions in vg.d can be called, this works as intended. but as soon as i overload a function from vg.d in openvg.d i can only call the function in openvg.d

example:
vg.d:
module vg;
extern (C) void  vgSetParameterfv(VGHandle object, VGint paramType, VGint count, VGfloat *values);

openvg.d
module openvg;
public import vg;

void vgSetParameterfv(VGHandle object, VGint paramType, const(VGfloat[]) values)
{
	vg.vgSetParameterfv(object, paramType, cast(int)values.length, cast(VGfloat*)values);
}

test.d
import openvg;
vgSetParameterfv(object, paramType, length, values); // call to fun in vg.d

how can i call both functions? i'd like to avoid using the module prefix vg.vgSetParameterfv if possible

source:
https://github.com/oggs91/OpenVG_D/blob/master/openvg/
April 08, 2015
On Wednesday, 8 April 2015 at 12:05:00 UTC, ddos wrote:
> vg.d:
> module vg;
> extern (C) void  vgSetParameterfv(VGHandle object, VGint paramType, VGint count, VGfloat *values);
>
> openvg.d
> module openvg;
> public import vg;
>
> void vgSetParameterfv(VGHandle object, VGint paramType, const(VGfloat[]) values)
> {
> 	vg.vgSetParameterfv(object, paramType, cast(int)values.length, cast(VGfloat*)values);
> }
>
> test.d
> import openvg;
> vgSetParameterfv(object, paramType, length, values); // call to fun in vg.d
>
> how can i call both functions? i'd like to avoid using the module prefix vg.vgSetParameterfv if possible

Add to openvg:
alias vgSetParameterfv = vg.vgSetParameterfv;
April 08, 2015
On Wednesday, 8 April 2015 at 17:48:36 UTC, anonymous wrote:
> On Wednesday, 8 April 2015 at 12:05:00 UTC, ddos wrote:
>> vg.d:
>> module vg;
>> extern (C) void  vgSetParameterfv(VGHandle object, VGint paramType, VGint count, VGfloat *values);
>>
>> openvg.d
>> module openvg;
>> public import vg;
>>
>> void vgSetParameterfv(VGHandle object, VGint paramType, const(VGfloat[]) values)
>> {
>> 	vg.vgSetParameterfv(object, paramType, cast(int)values.length, cast(VGfloat*)values);
>> }
>>
>> test.d
>> import openvg;
>> vgSetParameterfv(object, paramType, length, values); // call to fun in vg.d
>>
>> how can i call both functions? i'd like to avoid using the module prefix vg.vgSetParameterfv if possible
>
> Add to openvg:
> alias vgSetParameterfv = vg.vgSetParameterfv;

thx that works, but why is it even necessary?

same behavior when overriding methods of base classes

class Matrix(T)
{
  abstract const(T) opIndexAssign(const(T) val, int row, int col);
  Matrix!T opIndexAssign(T val, Tuple!(int,int) idx0, Tuple!(int,int) idx1)
  {
    ...
  }
}

class DenseMatrix(T) : Matrix!(T)
{
    override const(T) opIndexAssign(const(T) val, int row, int col)
    {
    	...
    }

    alias opIndexAssign = Matrix!T.opIndexAssign;
}

why not just make it callable without the alias?
April 09, 2015
ddos:

> same behavior when overriding methods of base classes

This is by design.

Bye,
bearophile
April 09, 2015
On Wednesday, 8 April 2015 at 22:53:39 UTC, ddos wrote:
> why not just make it callable without the alias?

It's to prevent "hijacking": http://dlang.org/hijack.html
April 09, 2015
On Thursday, 9 April 2015 at 05:34:09 UTC, anonymous wrote:
> On Wednesday, 8 April 2015 at 22:53:39 UTC, ddos wrote:
>> why not just make it callable without the alias?
>
> It's to prevent "hijacking": http://dlang.org/hijack.html

thx for the article!