++C++: �V‚µ‚¢ƒ‰ƒCƒtƒXƒ^ƒCƒ‹‚ð�lˆÄ‚µ‚Ü‚µ‚½
�¡ ‚±‚̃XƒŒƒbƒh‚Í‰ß‹Žƒ�ƒO‘qŒÉ‚ÉŠi”[‚³‚ê‚Ä‚¢‚Ü‚·
0001—¥“®‚·‚é–¼–³‚µ‚³‚ñ
NGNGvirtual‚Ì�‚¢Žš‚©‚猈•ʂł«‚Ü‚·�B
--object.h
#define FINALIZED_CLASS(Base,User) Base##_T<User>
struct Object{
�@�@foo(){ return 0; }; //virtual‚̂‚à‚è
�@�@enum{ bar=0 }; //virtual const?
};
template <class Object_User>
struct Object_T : Object_User{
�@�@FooPlusBar(){ return foo()+bar; };
};
--foo.cpp
#include "object.h"
struct MyObjectImp:Object{
�@�@foo(){ return 1; }; //ƒI�[ƒo�[ƒ‰ƒCƒh
�@�@enum{ bar=1 }; //ƒI�[ƒo�[ƒ‰ƒCƒh
};
typedef FINALIZED_CLASS(Object,MyObjectImp) MyObject;
main(){
�@�@return MyObject().FooPlusBar(); // =2
}
--foo.asm
_main:
�@�@mov eax,2
�@�@ret
--
00022get
NGNG00033get
NGNG0004ƒfƒtƒHƒ‹ƒg‚Ì–¼–³‚µ‚³‚ñ
NGNG0005_
NGNG0006ƒfƒtƒHƒ‹ƒg‚Ì–¼–³‚µ‚³‚ñ
NGNGƒÁƒÁƒÇƒÈƒÈƒÍƒÒƒÁƒÁƒÇƒËƒÍ
ƒÑƒ¿ƒÑƒ¿ƒÇƒÅƒ¿�H
0007ŽR�è �Â
NGNG�@__�È�Q�È_
�@|�i�@�@�O�O �j|�@�ƒ�Q‚é‚Û�i�O�O�j
�@|�_����_
�@�_ |�Ü�Ü�Ü~|�@�@�@�@�@�@�@�@�@ŽR�è�Â
�@�@ ~�P�P�P�P
�¡ ‚±‚̃XƒŒƒbƒh‚Í‰ß‹Žƒ�ƒO‘qŒÉ‚ÉŠi”[‚³‚ê‚Ä‚¢‚Ü‚·