need help about get all public static function name
Stanislav Blinov
stanislav.blinov at gmail.com
Mon Oct 22 12:16:50 UTC 2018
On Monday, 22 October 2018 at 12:03:22 UTC, test wrote:
> On Monday, 22 October 2018 at 11:59:21 UTC, test wrote:
>> On Monday, 22 October 2018 at 11:42:59 UTC, test wrote:
>> I try made a simple example but it has no error:
>
>
> I find the way to show the error:
>
> https://run.dlang.io/is/f8cULz
>
>
> import std.traits;
>
> struct FiberS {
> static auto getThis(){
> return Fiber.getId();
> }
> }
>
> struct Proxy(T){
> T* ptr;
> alias getPayload this;
>
> @property ref auto getPayload() inout return {
> return * ptr ;
> }
>
> static auto getId(){
> return 1;
> }
> }
> alias Fiber = Proxy!(FiberS);
>
>
> extern(C) void main(){
> auto id = Fiber.getThis(); // work here
> }
>
> struct TcpStream {
> void read(ubyte[] data){
> auto id = Fiber.getThis(); // not work here in my
> case
> }
> }
Let's analyze this call:
auto id = Fiber.getThis();
You're trying to call a static function 'getThis' on Fiber.
The type 'Fiber' is really a Proxy!FiberS. Proxy doesn't have a
static getThis() function. So the compiler tries an 'alias this',
which forwards to a non-static member function getPayload(). To
call that function, you need an instance of 'Proxy', which you
don't have.
I guess the first error message ("this for getPayload needs to be
type Proxy not type TcpStream") just doesn't report that clearly.
More information about the Digitalmars-d-learn
mailing list