Hacker News new | past | comments | ask | show | jobs | submit login

I don't know what structural subtyping is, but I no that Go's interfaces are nothing like anything in C++



    class A { public: int do() { return 1; } };
    class B { public: int do() { return 2; } };
    
    template <typename T> int do(T t) { return t.do(); }


How does one use that template? Can you show me a function that takes anything with a do() method? Like this?:

    do<A>(a)
    do<B>(b)
Can I take any arbitrary type with an "int do()" method and use that with do? Like:

    do(Arbitrary)


"How does one use that template? Can you show me a function that takes anything with a do() method? Like this?:"

It should work without the template parameter: do(a), do(b)

"Can I take any arbitrary type with an "int do()" method and use that with do?"

Yes.


cool


As dan00 noted, it works without the template as long as there is no ambiguity. If there's an ambiguity (a template function defined on <int, int> and <double, double> to which you provide an int and a double) then you have to use explicit template parameter to specify which overload will be used.

It's not the case here, so it just works.


> I don't know what structural subtyping is

Which is why "you have never seen a language doing interfaces like Go", everybody else calls it what it is (structural typing/structural subtyping)

> I no that Go's interfaces are nothing like anything in C++

Well you may "know" it, but your knowledge is wrong.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: