digitalmars.D.learn - Get class size of object
- JS (7/7) Aug 10 2013 Given an object, is there a built in way to get the size of the
- Tobias Pankrath (2/9) Aug 11 2013 There is no general way to do this at compile time in any language.
- JS (4/21) Aug 11 2013 Is this a mathematical fact that you have proven for all
- Tobias Pankrath (4/7) Aug 11 2013 That's so obvious, that you should be able to come up with one
- JS (8/15) Aug 11 2013 No, but your simple wrong. Either you have no clue what you are
- Timon Gehr (2/4) Aug 11 2013 Yes.
- JS (2/7) Aug 11 2013 Troll.
- Maxim Fomin (7/15) Aug 11 2013 I guess he does not answer to the question as well as others do
- bearophile (7/10) Aug 11 2013 The object instance contains a pointer to the virtual table, so
- Maxim Fomin (8/18) Aug 11 2013 I do not know how you can calculate precisely object size by
- Timon Gehr (2/9) Aug 11 2013 http://en.wikipedia.org/wiki/Troll_(Internet)
- JS (5/16) Aug 11 2013 Seriously, do you not have anything better to do with your life?
- Timon Gehr (10/26) Aug 11 2013 That's obvious. You are the _first_ guy capably trolling these
- JS (18/52) Aug 11 2013 Really? Because I won't except your help hands down. You are an
- Timon Gehr (3/3) Aug 11 2013 You seem to show a certain amount of sophistication in projecting your
- Andrej Mitrovic (4/6) Aug 11 2013 Try:
- Adam D. Ruppe (4/6) Aug 11 2013 try this:
- Dicebot (2/8) Aug 11 2013 This.
- Maxim Fomin (3/9) Aug 11 2013 Yes, this is answer to the question. By the way, it can be simply
- Dicebot (3/6) Aug 11 2013 If exact type is statically known, no ClassInfo is required:
- JS (17/24) Aug 11 2013 This is essentially what I'm doing BUT I am trying to avoid
- Adam D. Ruppe (5/6) Aug 11 2013 What are you actually going to use the number for? If you are
- JS (5/11) Aug 11 2013 What's the difference between init.length and classInstanceSize?
- Adam D. Ruppe (68/70) Aug 11 2013 classInstanceSize is based on the static type, whereas typeid()
- JS (49/49) Aug 11 2013 I think you're missing the point to some degree(I realize there
- Adam D. Ruppe (10/11) Aug 11 2013 I don't see what the difference is in functionality - it looks to
- JS (15/26) Aug 11 2013 Well, I am wrapping the stuff. But when I've tried to do
- Adam D. Ruppe (6/8) Aug 11 2013 Oh, I see it now. I think typeid(interface) gives a different set
- Adam D. Ruppe (7/9) Aug 11 2013 Thinking about it a bit more, this makes sense because an
- JS (11/20) Aug 11 2013 Possibly. Since I program to interfaces, every reference I use is
- Simen Kjaeraas (42/51) Aug 11 2013 It would appear that some information is lost when calling typeid from a...
- JS (7/64) Aug 11 2013 I attack people because they are arrogant bastards. They do
- JS (5/5) Aug 11 2013 BTW, I hope that if you want to be added to the ignore list on my
- Jacob Carlborg (25/28) Aug 12 2013 How about this:
- JS (5/33) Aug 12 2013 Sorry but this doesn't work. b is a B, not an A.
- Jacob Carlborg (4/8) Aug 12 2013 Right, forgot about the interface.
- JS (3/11) Aug 12 2013 NP, happens to all of us. Simen's method of casting to object
- Dicebot (2/5) Aug 11 2013 I was answering to Maxim, I don't give a fuck about your problems.
- JS (14/20) Aug 11 2013 THEN WHY THE FUCK DO YOU POST ON MY THREAD? You have not helped
- Dicebot (5/6) Aug 11 2013 Because you are so funny when you rage and I take pleasure in
- John Colvin (3/24) Aug 12 2013 I am actually coming round to seeing the funny side :-) It's like
Given an object, is there a built in way to get the size of the class the object represents? The object may be instantiated with a derived instance of the object type, so using classInstanceSize doesn't work on the type of the object. I can obviously go through the trouble of adding a class member and override it in all the derived classes. I saw tsize in object but 2.063 says it doesn't exist.
Aug 10 2013
On 11.08.2013 06:25, JS wrote:Given an object, is there a built in way to get the size of the class the object represents? The object may be instantiated with a derived instance of the object type, so using classInstanceSize doesn't work on the type of the object. I can obviously go through the trouble of adding a class member and override it in all the derived classes. I saw tsize in object but 2.063 says it doesn't exist.There is no general way to do this at compile time in any language.
Aug 11 2013
On Sunday, 11 August 2013 at 09:30:32 UTC, Tobias Pankrath wrote:On 11.08.2013 06:25, JS wrote:Is this a mathematical fact that you have proven for all languages? I'd like to see your proof if it's not bigger than what will fit in a post.Given an object, is there a built in way to get the size of the class the object represents? The object may be instantiated with a derived instance of the object type, so using classInstanceSize doesn't work on the type of the object. I can obviously go through the trouble of adding a class member and override it in all the derived classes. I saw tsize in object but 2.063 says it doesn't exist.There is no general way to do this at compile time in any language.
Aug 11 2013
Is this a mathematical fact that you have proven for all languages? I'd like to see your proof if it's not bigger than what will fit in a post.That's so obvious, that you should be able to come up with one yourself. Maybe you never experienced a situation where it was clear, but that doesn't mean I need to come up with a proof, just because you are to lazy to do it yourself.
Aug 11 2013
On Sunday, 11 August 2013 at 15:38:04 UTC, Tobias Pankrath wrote:No, but your simple wrong. Either you have no clue what you are talking about, don't understand the issue, or are intentionally stating falsehoods. It's very easy to manually implement a way to get the class size by just using a virtual function that returns the class size. But do you think I should have to waste my time adding the same function to every class to make it work? Of course you do.Is this a mathematical fact that you have proven for all languages? I'd like to see your proof if it's not bigger than what will fit in a post.That's so obvious, that you should be able to come up with one yourself. Maybe you never experienced a situation where it was clear, but that doesn't mean I need to come up with a proof, just because you are to lazy to do it yourself.
Aug 11 2013
On 08/11/2013 06:25 AM, JS wrote:Given an object, is there a built in way to get the size of the class the object represents?Yes.
Aug 11 2013
On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.
Aug 11 2013
On Sunday, 11 August 2013 at 15:28:44 UTC, JS wrote:On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:I guess he does not answer to the question as well as others do (including me) because of your misbehavior in D newsgroups. Solution to your question is obvious (built-in feature without any import). By the way, GC.sizeOf seems to return size of allocated page which is bigger than needed (for ex. it returns 16 for a new int which is 4).On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.
Aug 11 2013
Maxim Fomin:GC.sizeOf seems to return size of allocated page which is bigger than needed (for ex. it returns 16 for a new int which is 4).The object instance contains a pointer to the virtual table, so there's a way to know what object it is. With that runtime information it should be possible to know the static size of the instance. Bye, bearophile
Aug 11 2013
On Sunday, 11 August 2013 at 16:16:26 UTC, bearophile wrote:Maxim Fomin:I do not know how you can calculate precisely object size by knowing that GC.sizeOf returns some aligned amount plus knowing something about virtual table. In case of simple objects (like ints) it does not work since int has no virtual table. Anyway such guessing is useless since D provides feature to get size of class instance (if it is defined) even in comple time like enum S = _get_size ...GC.sizeOf seems to return size of allocated page which is bigger than needed (for ex. it returns 16 for a new int which is 4).The object instance contains a pointer to the virtual table, so there's a way to know what object it is. With that runtime information it should be possible to know the static size of the instance. Bye, bearophile
Aug 11 2013
On 08/11/2013 05:28 PM, JS wrote:On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:http://en.wikipedia.org/wiki/Troll_(Internet)On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.
Aug 11 2013
On Sunday, 11 August 2013 at 17:12:48 UTC, Timon Gehr wrote:On 08/11/2013 05:28 PM, JS wrote:Seriously, do you not have anything better to do with your life? Why do you hang out on my posts if you are the one that's not the troll. I don't want any of your help so why don't you just do us all a favor and ignore any post I make?On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:http://en.wikipedia.org/wiki/Troll_(Internet)On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.
Aug 11 2013
On 08/11/2013 07:26 PM, JS wrote:On Sunday, 11 August 2013 at 17:12:48 UTC, Timon Gehr wrote:No. How about you?On 08/11/2013 05:28 PM, JS wrote:Seriously, do you not have anything better to do with your life?On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:http://en.wikipedia.org/wiki/Troll_(Internet)On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.Why do you hang out on my posts if you are the one that's not the troll.That's obvious. You are the _first_ guy capably trolling these newsgroups, so we are still too naive to believe that you are not receptive to rational argumentation and incapable of constructive discussion.I don't want any of your helpThe best way to not receive help is to quit asking for help.so why don't you just do us all a favor and ignore any post I make?I am as confused about this as you are but I can't talk for everyone. What is _your_ motivation, 'JS'? If you think your posts are worth ignoring, simply stop making noise.
Aug 11 2013
On Sunday, 11 August 2013 at 18:15:28 UTC, Timon Gehr wrote:On 08/11/2013 07:26 PM, JS wrote:That explains it all. How bout you get a life?On Sunday, 11 August 2013 at 17:12:48 UTC, Timon Gehr wrote:No. How about you?On 08/11/2013 05:28 PM, JS wrote:Seriously, do you not have anything better to do with your life?On Sunday, 11 August 2013 at 13:40:41 UTC, Timon Gehr wrote:http://en.wikipedia.org/wiki/Troll_(Internet)On 08/11/2013 06:25 AM, JS wrote:Troll.Given an object, is there a built in way to get the size of the class the object represents?Yes.Really? Because I won't except your help hands down. You are an arrogant bastard who thinks you know it all. When someone challenges you because they won't accept you as the god you then cry like a little bitch.Why do you hang out on my posts if you are the one that's not the troll.That's obvious. You are the _first_ guy capably trolling these newsgroups, so we are still too naive to believe that you are not receptive to rational argumentation and incapable of constructive discussion.Rigghhtt... your logic is wonderful. Don't ask for help in .learn. I guess you are trying to run me off because you can't stand me huh? Well the feeling is mutual... but at least there are a few intelligent people still left in here that actually want to help for the sake of helping and not to feed their ego.I don't want any of your helpThe best way to not receive help is to quit asking for help.Again, here is your very arrogant egotistical personality shining through(only other arrogant egotistical people will not see this). What is useless to one person is not to another. If you weren't so arrogant you would see this and let me make my posts in peace and let those that want to help me do that. Instead you rant against my posts in my thread to shut it down... but yet you call me the troll.so why don't you just do us all a favor and ignore any post I make?I am as confused about this as you are but I can't talk for everyone. What is _your_ motivation, 'JS'? If you think your posts are worth ignoring, simply stop making noise.
Aug 11 2013
You seem to show a certain amount of sophistication in projecting your own attributes on others. Why not retarget that creativity to achieve something useful?
Aug 11 2013
On 8/11/13, JS <js.mdnq gmail.com> wrote:Given an object, is there a built in way to get the size of the class the object represents?Try: import core.memory; auto size = GC.sizeOf(object);
Aug 11 2013
On Sunday, 11 August 2013 at 04:25:21 UTC, JS wrote:Given an object, is there a built in way to get the size of the class the object represents?try this: Object obj = new Whatever(); auto size = typeid(obj).init.length;
Aug 11 2013
On Sunday, 11 August 2013 at 16:36:53 UTC, Adam D. Ruppe wrote:On Sunday, 11 August 2013 at 04:25:21 UTC, JS wrote:This.Given an object, is there a built in way to get the size of the class the object represents?try this: Object obj = new Whatever(); auto size = typeid(obj).init.length;
Aug 11 2013
On Sunday, 11 August 2013 at 16:36:53 UTC, Adam D. Ruppe wrote:On Sunday, 11 August 2013 at 04:25:21 UTC, JS wrote:Yes, this is answer to the question. By the way, it can be simply enum S = typeid(Whatever).init.length;Given an object, is there a built in way to get the size of the class the object represents?try this: Object obj = new Whatever(); auto size = typeid(obj).init.length;
Aug 11 2013
On Sunday, 11 August 2013 at 16:40:48 UTC, Maxim Fomin wrote:Yes, this is answer to the question. By the way, it can be simply enum S = typeid(Whatever).init.length;If exact type is statically known, no ClassInfo is required: enum S = __traits(classInstanceSize, Whatever);
Aug 11 2013
On Sunday, 11 August 2013 at 16:43:09 UTC, Dicebot wrote:On Sunday, 11 August 2013 at 16:40:48 UTC, Maxim Fomin wrote:This is essentially what I'm doing BUT I am trying to avoid having to repeat the exact same crap in every class because it is time consuming, verbose, and error prone. For those that care, here is a snippet of what I am doing. For those that are bitches, GTFO. Remember, I'm a troll so everything I say or do here is irrelevant, so I don't even know why you are reading this in the first place. http://dpaste.dzfl.pl/d295bbbb Note that because it is a function call it is extremely expensive compared to a compile time literal. Disassembly shows that the actual size is a constant so the vtabl lookup and a function call is all that is required. I'd like to minimize the overhead as much as possible and, ideally not have to manually add the template mixins to each class(it would be nice if it were automated). I'm trying to reduce the costs of RT lookup as much as possible(as I feel it is not necessary).Yes, this is answer to the question. By the way, it can be simply enum S = typeid(Whatever).init.length;If exact type is statically known, no ClassInfo is required: enum S = __traits(classInstanceSize, Whatever);
Aug 11 2013
On Sunday, 11 August 2013 at 17:03:04 UTC, JS wrote:For those that care, here is a snippet of what I am doing.What are you actually going to use the number for? If you are going to write your own New function, you'll need the init anyway, so you aren't really paying more to get the size from it either.
Aug 11 2013
On Sunday, 11 August 2013 at 17:19:21 UTC, Adam D. Ruppe wrote:On Sunday, 11 August 2013 at 17:03:04 UTC, JS wrote:What's the difference between init.length and classInstanceSize? The class instance size must be known at compile time and I don't see why there will be a difference and what little testing I have done shows no difference.For those that care, here is a snippet of what I am doing.What are you actually going to use the number for? If you are going to write your own New function, you'll need the init anyway, so you aren't really paying more to get the size from it either.
Aug 11 2013
On Sunday, 11 August 2013 at 17:28:33 UTC, JS wrote:What's the difference between init.length and classInstanceSize?classInstanceSize is based on the static type, whereas typeid() fetches the dynamic type. Consider the following: === void showSizes(Object obj) { import std.stdio; writeln("Static size: ", __traits(classInstanceSize, typeof(obj))); writeln("Actual size: ", typeid(obj).init.length); } class Foo { int a; int b; } void main() { Foo foo = new Foo(); showSizes(foo); } === // note this would be 4 bytes for the monitor, 4 bytes for the vtable pointer Static size: 8 // this is the size of the parent class, Object, plus the size of Foo's members Actual size: 16 The difference is because showSizes statically only knows how to deal with the specific type written (Object), but it is legal to pass any derived objects to that function too. Since child classes can add more members, their sizes can change. typeid() gets information about the specific instance, so it gives accurate details about the child class. typeof() and __traits always work on the static type.The class instance size must be known at compile timeUnless you have the specific static type (in that case, use a template instead of a virtual function), you can't do that. Consider this: === auto lib = new SharedLibrary("plugin.dll"); auto create = cast(Object function()) lib.getProcAddress("createObject"); if(create !is null) { Object o = create(); // what is o? } === This plugin, by its nature, couldn't be known at compile time. It might not even exist yet at the time you're compiling the application! The dll could write its own class though - the function might look like this: === module plugin; class CoolPlugin { int a; int b; override string toString() { return "I have two members!"; } } export Object createObject() { return new CoolPlugin(); } === And there's no way for you to know how big CoolPlugin is at compile time. You can't see that code at all to know these details. At runtime, however, it is doable - that's where the typeid() comes in. It looks up the automatically generated run time type information.
Aug 11 2013
I think you're missing the point to some degree(I realize there is a diff between an object and a type, but I should be able to easily get the class size of an object at run time regardless if the object is typed as a base class). The code below does this, but at a cost of verbosity. Here is code that exactly demonstrates what I am essentially trying to do. The only drawback now is having to mixin the template for each class which I would want to automate and it would be nice to wrap the RT and CT methods in subclasses without overhead. http://dpaste.dzfl.pl/757eeb05 Note, I can easily get the class size, name, etc... by using the object or the type. import std.stdio; mixin template tObject(alias T) { override property int classSize() { return __traits(classInstanceSize, T); }; override property string className() { return T.stringof; }; immutable static int ClassSize = __traits(classInstanceSize, T); immutable static string ClassName = T.stringof; static T New(Args...)(Args args) { writeln(T.ClassSize); return new T(args); } } interface iObject(T) { property int classSize(); property string className(); } class A : iObject!A { double x; mixin tObject!A; } class B : A { double y; mixin tObject!B; double z, t; } void main() { A a = A.New(); A b = B.New(); writeln(a.classSize); writeln(b.classSize); readln; }
Aug 11 2013
On Sunday, 11 August 2013 at 18:33:19 UTC, JS wrote:The code below does this, but at a cost of verbosity.I don't see what the difference is in functionality - it looks to me that you just reimplemented what the compiler does automatically with typeid. The way typeid(obj) works is similar to a virtual function call internally, indeed, Class.vtbl[0] is a pointer to its TypeInfo instance. But anyway, then the typeinfo contains functions for the class name and size, pretty similar to what you just did. What does your implementation give you that typeid() doesn't?
Aug 11 2013
On Sunday, 11 August 2013 at 19:06:07 UTC, Adam D. Ruppe wrote:On Sunday, 11 August 2013 at 18:33:19 UTC, JS wrote:Well, I am wrapping the stuff. But when I've tried to do essentially l the same thing before using the compiler directly, it simply did not work. If you read Simen Kjaeraas's post you will see it doesn't work directly with interfaces, which is what I was doing. Hence, either a bug or anti-feature or whatever, the issue was with D and not some weird thing I was trying to do... All this nonsense is trying to work around D doing stupid stuff. All I know is that in my code, when trying to get the actual object size, even if derived(which may change the size), I would always get 4. I was using an interface as my base type. Regardless, there are now two solutions and I have to go back to my production code and figure out which one works best for my situation.The code below does this, but at a cost of verbosity.I don't see what the difference is in functionality - it looks to me that you just reimplemented what the compiler does automatically with typeid. The way typeid(obj) works is similar to a virtual function call internally, indeed, Class.vtbl[0] is a pointer to its TypeInfo instance. But anyway, then the typesameinfo contains functions for the class name and size, pretty similar to what you just did. What does your implementation give you that typeid() doesn't?
Aug 11 2013
On Sunday, 11 August 2013 at 19:33:43 UTC, JS wrote:If you read Simen Kjaeraas's post you will see it doesn't work directly with interfaces, which is what I was doing.Oh, I see it now. I think typeid(interface) gives a different set of info. This seems to work though: writeln(typeid(cast(Object)(f)).init.length); Just casting the interface to Object before fetching the info.
Aug 11 2013
On Sunday, 11 August 2013 at 19:58:26 UTC, Adam D. Ruppe wrote:Oh, I see it now. I think typeid(interface) gives a different set of info.Thinking about it a bit more, this makes sense because an interface is not necessarily an Object - it might also be a C++ class, or a COM object, or maybe even a slice into another vtbl if an Object implements multiple interfaces (not completely sure about the latter, I'd have to read some source, but it seems logical to me).
Aug 11 2013
On Sunday, 11 August 2013 at 20:03:27 UTC, Adam D. Ruppe wrote:On Sunday, 11 August 2013 at 19:58:26 UTC, Adam D. Ruppe wrote:Possibly. Since I program to interfaces, every reference I use is referenced to an interface. Needing the correct object size for implementing an allocator was not working as "expected"(at least as one would expect with classes). I could not see anything in the docs that would suggest otherwise(else the light bulb might have went off). i.e., one would expect, IMO, that tsize would work on interfaces because interfaces do not have a "size" so it should return the class size of the object. (so things work uniformly and we can program to interfaces without having to create workarounds).Oh, I see it now. I think typeid(interface) gives a different set of info.Thinking about it a bit more, this makes sense because an interface is not necessarily an Object - it might also be a C++ class, or a COM object, or maybe even a slice into another vtbl if an Object implements multiple interfaces (not completely sure about the latter, I'd have to read some source, but it seems logical to me).
Aug 11 2013
On 2013-08-11, 20:33, JS wrote:I think you're missing the point to some degree(I realize there is a diff between an object and a type, but I should be able to easily get the class size of an object at run time regardless if the object is typed as a base class). The code below does this, but at a cost of verbosity. Here is code that exactly demonstrates what I am essentially trying to do. The only drawback now is having to mixin the template for each class which I would want to automate and it would be nice to wrap the RT and CT methods in subclasses without overhead.It would appear that some information is lost when calling typeid from an interface. I would have expected this to work: interface I { final size_t size() { return typeid(this).init.length; } } class A {} class B : A, I { int a; } void test1() { I i = new B(); assert(i.size > 0); // Fails. } A bit more experimentation shows: void test2() { B b = new B(); I i = b; A a = b; assert(typeid(a) == typeid(b)); // Passes. assert(typeid(i) == typeid(b)); // Fails. assert(typeid(b).init.length > 0); // Passes. assert(typeid(i).init.length > 0); // Fails. } It appears thus that the error is in typeid(interface), which does not give the actual typeid. The workaround is as follows: interface I { final size_t size() { return typeid(cast(Object)this).init.length; } } Is this what you want? Is it good enough? I have no idea, as you're notoriously bad at describing what you want, but pretty good at attacking people. If you're looking for a no-overhead solution, then this might not be good enough. I'm surprised that a virtual function call is fine, though.
Aug 11 2013
On Sunday, 11 August 2013 at 19:08:58 UTC, Simen Kjaeraas wrote:On 2013-08-11, 20:33, JS wrote:I attack people because they are arrogant bastards. They do nothing to help but only contribute to the chaos. They deserve to be attacked because arrogant people are evil. In any case I think your solution might be correct. Originally I was using interfaces and do recall it working with classes but not interfaces but didn't know how to get it to work.I think you're missing the point to some degree(I realize there is a diff between an object and a type, but I should be able to easily get the class size of an object at run time regardless if the object is typed as a base class). The code below does this, but at a cost of verbosity. Here is code that exactly demonstrates what I am essentially trying to do. The only drawback now is having to mixin the template for each class which I would want to automate and it would be nice to wrap the RT and CT methods in subclasses without overhead.It would appear that some information is lost when calling typeid from an interface. I would have expected this to work: interface I { final size_t size() { return typeid(this).init.length; } } class A {} class B : A, I { int a; } void test1() { I i = new B(); assert(i.size > 0); // Fails. } A bit more experimentation shows: void test2() { B b = new B(); I i = b; A a = b; assert(typeid(a) == typeid(b)); // Passes. assert(typeid(i) == typeid(b)); // Fails. assert(typeid(b).init.length > 0); // Passes. assert(typeid(i).init.length > 0); // Fails. } It appears thus that the error is in typeid(interface), which does not give the actual typeid. The workaround is as follows: interface I { final size_t size() { return typeid(cast(Object)this).init.length; } } Is this what you want? Is it good enough? I have no idea, as you're notoriously bad at describing what you want, but pretty good at attacking people. If you're looking for a no-overhead solution, then this might not be good enough. I'm surprised that a virtual function call is fine, though.
Aug 11 2013
BTW, I hope that if you want to be added to the ignore list on my side, you use the script and do the same. I know some will want everyone to see their irrelevant posts but I won't see it and so you will never get a response from me and it just clutters up the NG and distracts from D.
Aug 11 2013
On 2013-08-11 21:08, Simen Kjaeraas wrote:If you're looking for a no-overhead solution, then this might not be good enough. I'm surprised that a virtual function call is fine, though.How about this: interface I { size_t size (this T) () { return __traits(classInstanceSize, T); } } class A : I { } class B : I { int a; } void main () { auto a = new A; auto b = new B; assert(a.size == 24); assert(b.size == 32); } -- /Jacob Carlborg
Aug 12 2013
On Monday, 12 August 2013 at 11:34:25 UTC, Jacob Carlborg wrote:On 2013-08-11 21:08, Simen Kjaeraas wrote:Sorry but this doesn't work. b is a B, not an A. try I a = new A; I b = new B;If you're looking for a no-overhead solution, then this might not be good enough. I'm surprised that a virtual function call is fine, though.How about this: interface I { size_t size (this T) () { return __traits(classInstanceSize, T); } } class A : I { } class B : I { int a; } void main () { auto a = new A; auto b = new B; assert(a.size == 24); assert(b.size == 32); }
Aug 12 2013
On 2013-08-12 17:49, JS wrote:Sorry but this doesn't work. b is a B, not an A. try I a = new A; I b = new B;Right, forgot about the interface. -- /Jacob Carlborg
Aug 12 2013
On Monday, 12 August 2013 at 19:44:56 UTC, Jacob Carlborg wrote:On 2013-08-12 17:49, JS wrote:NP, happens to all of us. Simen's method of casting to object seems to be the easiest way to get it to work.Sorry but this doesn't work. b is a B, not an A. try I a = new A; I b = new B;Right, forgot about the interface.
Aug 12 2013
On Sunday, 11 August 2013 at 17:03:04 UTC, JS wrote:This is essentially what I'm doing BUT I am trying to avoid having to repeat the exact same crap in every class because it is time consuming, verbose, and error prone.I was answering to Maxim, I don't give a fuck about your problems.
Aug 11 2013
On Sunday, 11 August 2013 at 18:18:22 UTC, Dicebot wrote:On Sunday, 11 August 2013 at 17:03:04 UTC, JS wrote:THEN WHY THE FUCK DO YOU POST ON MY THREAD? You have not helped or tried to help one post. You have only ever tried to shut down any questions or suggestions I have based on your arrogant belief system that everyone and everything revolves around you... yet you continue to invade my posts. Seriously, Why can't you just leave me the fuck along and ignore my posts? Is it difficult? No, it's not. This suggests you intentionally want to make trouble. In any case, I'm through talking to you bastards. I will ignore your post from now on. In fact, I'll write a script at some point to simply remove your posts, Tim's, and others that want to act like little fucking arrogant kids that haven't got their ass kicked hard enough to realize they are not the center of the universe.This is essentially what I'm doing BUT I am trying to avoid having to repeat the exact same crap in every class because it is time consuming, verbose, and error prone.I was answering to Maxim, I don't give a fuck about your problems.
Aug 11 2013
On Sunday, 11 August 2013 at 18:29:15 UTC, JS wrote:THEN WHY THE FUCK DO YOU POST ON MY THREAD?Because you are so funny when you rage and I take pleasure in stressing someone as retarded as you ;) Well, actually not. It was just to clarify possible misconception by Maxim. Still feels good.
Aug 11 2013
On Sunday, 11 August 2013 at 18:29:15 UTC, JS wrote:On Sunday, 11 August 2013 at 18:18:22 UTC, Dicebot wrote:I am actually coming round to seeing the funny side :-) It's like a toddler screaming and throwing soft toys at peopleOn Sunday, 11 August 2013 at 17:03:04 UTC, JS wrote:THEN WHY THE FUCK DO YOU POST ON MY THREAD? You have not helped or tried to help one post. You have only ever tried to shut down any questions or suggestions I have based on your arrogant belief system that everyone and everything revolves around you... yet you continue to invade my posts. Seriously, Why can't you just leave me the fuck along and ignore my posts? Is it difficult? No, it's not. This suggests you intentionally want to make trouble. In any case, I'm through talking to you bastards. I will ignore your post from now on. In fact, I'll write a script at some point to simply remove your posts, Tim's, and others that want to act like little fucking arrogant kids that haven't got their ass kicked hard enough to realize they are not the center of the universe.This is essentially what I'm doing BUT I am trying to avoid having to repeat the exact same crap in every class because it is time consuming, verbose, and error prone.I was answering to Maxim, I don't give a fuck about your problems.
Aug 12 2013