On Wednesday, 2 April 2014 at 18:14:46 UTC, Steve Teale wrote:
But both of these approaches are clumsy compared to what I would like to see.

Yeah, I think it would need language support to be worthwhile in the long run. I think it makes a lot of sense for constructors that the superclass has the first and last word in what the object should look like. E.g. let subclasses populate an array in their "inner-clauses" and let the superclass verify it or compile it into something efficient.

However, it does require a sensible super class design since you don't override virtual functions, but merely extend them.

I'm pleased to see though that some other languages have noted this deficiency.

Yup, I am not sure if the inner clause was in Simula I in 1963, but I believe it must have been present in Simula67. It was also used for prefixing of blocks in Simula so that you could open "libraries" by turning a class into a scope. E.g.

class MyToolkit begin
  integer filehandler;
  methods like print()
  filehandler = openstuff();
  inner;
  closestuff(filehandler);
end

// and use it as

MyTookit begin
   print() // file is open, we can print here
end

As Simula was Bjarne Stroustrup's influence for C++ he really does not have an excuse for not adopting this stuff. ;-) Well, I guess RAII is his version of "inner"…

If you had virtual types as class members then I guess you could emulate inner with RAII like patterns. (By instantiating the class rather than doing a function call and let the constructor and destructor wrap the "inner")

Reply via email to