可以求得成员函数,成员变量的地址
也可以得到普通变量和函数的地址或者值
3 [; [3 z! d) c0 ]换句话,就是又一个版本的AnythingToLong
: K9 y8 K' i- P优化过后,毫无性能损失
所以我觉得是一个较好的解决办法
' R& k1 u1 ?; s) P
// test.cpp : Defines the entry point for the console application.
8 |. p1 K* v+ f, v( a+ T//
. f! ]2 n5 ^6 @: G; v8 [
#include "stdafx.h"
7 E$ V# c* m! p- Z+ _# c
template<class T>
7 {7 c7 l) {( h* P/ [3 @) cinline unsigned long ValueOf(const T &value)
{
return *(unsigned long*)(&value);
}
& h1 j& |9 L/ A; b' ]8 {4 a
template<class T>
# ^; U2 l2 I) N, Iinline int SizeOfArray(const T &array)
9 [4 N7 Z4 h3 v- h$ ~9 Y& G! B s{
return sizeof(array)/sizeof(array[0]);
3 v: S- ~" o, r' p8 i/ X; y" h9 F% h, p}
class Test
{
+ |: U& n* ]3 N# k9 J6 m( Jpublic:
3 f$ U4 Y$ Q$ E1 P9 E* ^int a,b;
void f(){}
6 f, n2 Z F3 B" I};
9 P0 c/ D& i6 t
int main(int argc, char* argv[])
- w, e- J# W! Q; m: V{
int t[16];
# y) @9 ^; ?1 V( V' E! lint n=1000;
7 p) W. q& H e9 u: |: X9 N' t8 `4 \
// cout<<SizeOfArray(t)<<endl;
6 r% e" D! ^/ s& I7 f4 K3 scout<<ValueOf(&Test::a)<<endl;
cout<<ValueOf(&Test::b)<<endl;
6 b( y4 q+ i- N) U$ Ocout<<ValueOf(&Test::f)<<endl;
/ E) N" ]9 D5 H2 q7 {! m% V9 }( S$ O' z: W. ?
cout<<ValueOf(&t)<<endl;
( M1 f- A5 \: I0 {( s5 icout<<(long)&t<<endl;
- I: `. W2 l, p. r! o. @
cout<<ValueOf(n)<<endl;
return 0;
) H; I" ]* v& _3 A4 u0 L3 ?}
( e( X6 _% d% A. M1 P/ A- {& A/ j/ Q3 e
//运行结果
16
0
; w( v/ I: D( l" C4
+ @0 _5 K6 s' [& @* t4 s 2 w( L" c. x* D ~1 v( k, U% P4198425
6684088
% D. j, y& T( ?3 u/ o6684088
9 D$ k3 \* \- O1 Z' S5 _1000
5 U! Q5 r4 t+ _ p3 VPress any key to continue
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |