- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
template<int ID> struct typeof_access
{
struct id2type; //not defined
};
template<class T, int ID> struct typeof_register : typeof_access
{
// define base's nested class here
struct typeof_access::id2type
{
typedef T type;
};
};
//Type registration function
typeof_register<T, compile-time-constant> register_type(const T&);
//Actually register type by instantiating typeof_register for the correct type
sizeof(register_type(some-type));
//Use the base class to access the type.
typedef typeof_access::id2type::type type;
Igor Chesnokov discovered a method that allows to implement typeof on the VC series of compilers. It uses a bug in the Microsoft compiler that allows a nested class of base to be defined in a class derived from base.
http://www.boost.org/doc/libs/1_54_0/doc/html/typeof/other.html
LispGovno 03.09.2013 19:49 # 0
guest 03.09.2013 19:54 # 0
defecate-plusplus 03.09.2013 20:01 # +2
лень пройти по ссылке? она же даже синяя и подчеркнутая!
guest 03.09.2013 20:04 # 0
guest 03.09.2013 20:14 # 0
LispGovno 04.09.2013 12:08 # 0
PS: Если честно так и не понял как этот странный хак typeof_access работает и каким образом он позволяет извлечь тип. И по моему тут верстка документа какие-то <...> съела.