Coder Social home page Coder Social logo

Comments (4)

nddrylliog avatar nddrylliog commented on August 16, 2024

Note that your operator definition is recursive. Compile with -O2 and.. infinite loop o/

from rock.

solson avatar solson commented on August 16, 2024

Yeah, silly example. :P

But I also really want this. It's nice to put operator overloads inside the class they actually belong to.

from rock.

nddrylliog avatar nddrylliog commented on August 16, 2024

Well, I have nothing against implementing this, but there will be a slight difference in semantics from the 'operator overloading outside of class' way.

Why? Easy.

Operator overloads outside a type definition (not necessarily only a class) allow to add operator overloads to any type. And I mean any. Especially if it's defined in completely another module, and especially if the type is defined in a library which you can't change the source (that can and will happen eventually, with the upcoming libs format allowing separate compilation)

The problem is that, if you do the following:

  • Define a 'List' class in structs/List
  • Define operator [] for List in structs/List
  • Define an 'ArrayList' class in structs/ArrayList

...then if you only import ArrayList, you won't get operator overloading for it. Why does that happen? Well, rock can't take into account the operator oveloading in List, otherwise - how could it choose? There might be operator overloads for some super-class of ArrayList in an other module that ArrayList imports. It would be messy and thus, that's not how it works.

It's handy sometimes, because it allows you to override existing operator overloads if you don't like them. If you want to monitor ArrayList accesses in your application, just define an operator [] to ArrayList and import it everywhere - if it's imported after List/ArrayList, it'll be chosen instead (or at least should be - report a bug if it's not.)

So now, how will that be handled with operator overloads in class? Well operator overloads in class should, in my opinion, behave different: ie. if you define operator overloads within the List class, then only impoting ArrayList should give you those operator overloads, ie. member operator overloads would be inherited.

That may be seen as a small difference for the day-to-day user but important enough that it should be discussed on this issue imho. If everyone agrees to that behavior then we'll be able to get started on the implementation.

from rock.

nddrylliog avatar nddrylliog commented on August 16, 2024

Woop! #583 is a duplicated and has been closed in the 'templates' branch - will be in 0.9.6

from rock.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.