楼主: 
chubiei (:))   
2014-07-01 00:44:21版大的写法太隐晦了
其实这边需要的是动态的type注册系统
http://ideone.com/oPvexQ
这边的 TypeRegistry 其实相当于版大用的 maximum size:
版大的作法是每加入一个新的type
底下的memory array会利用 maximum size以及sizeof(value)自动调整
因此这边可以显而易见一个问题就是
当多个Foo instance存在 而且每个instance需要存放不同的type object的话
底下的memory array会产生浪费
而且使用char array会遭遇到麻烦的constructor/destructor问题
需要再写其他code去包装
相反 利用TypeRegistry的作法
将 type <-> id 的 index 和存放 value 的 Foo 本身做脱勾
每一个 type 都会拿到自己独特的 id
Foo 本身只要处理好依照 id 存取的 code 即可
因此这边可以看情况看随意代换底下的 value store:
如果将 value store 换成是 vector 就会 fallback 成版大的 code
浪费一点空间 但是存取是 O(1)
这边是用 map 完全不会浪费空间 但是存取是 O(lg N)
※ 引述《yoco315 (眠月)》之铭言:
: 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Standard C++11 or beyond
: 问题(Question):
: 想要请各位大大,是否存在一种手法,
: 能让我以 type 来 access data member?
: 会想要用 type 来存取,是因为我根据不同的 type 需要存取到不同的值,
: 但因为是 template,到底会有哪些 type 其实我不确定。
: 举个例子来说
:     struct Foo {
:         template <typename T>
:         T& get() {
:             static T v;
:             return v;
:         }
:     }
: 这样我就可以透过下面这种手法来“模拟”用 type 来存取 data member
:     Foo a;
:     a.get<int>() = 5;
:     a.get<int>()++;
:     std::cout << a.get<int>() << std::endl; // 印出 6
:     a.get<float>() = 3.14;
:     std::cout << a.get<float>() << std::endl; // 印出 3.14
: 这个方法的缺点,是这些模拟出来的 data member 一定都是 static 的
: 因为当我
:     Foo a;
:     Foo b;
:     a.get<int>() = 5;
:     std::cout << b.get<int>() << std::endl; // 印出 5
: 那我现在很想知道有没有一种手法可以让我同时满足下面三个条件:
:     1. 可以透过 type 来自动的生成 data member
:        当然,会有哪些 type,在 compile time 就已经确定
:        但使用可以不用明确指定会有 int, float, Bar, 等等
:        要像上面那种例子一样,compiler 要能自己蒐集所有的使用点
:     2. 要是 non-static 的!
:        a.get<X>() 跟 b.get<X>() 要是不同人
:     3. 要有效率,希望能避开下面这种作法
:         struct Foo {
:             template <typename T>
:             T& get() {
:                 static std::map<Foo*, T> m;
:                 return m[this]; // 既然是 static,那我透过 this 来 map 可以吧
:             }
:         };
: 百思不得其解,盼前辈解惑。
: 小妹先谢过了。
作者: 
LPH66 (-6.2598534e+18f)   
2014-07-01 01:14:00ID 的话或许可以学一下 LLVM 的做法, 它用一个 class static的成员变量的指标当 ID, 初始化时会向子类别要一个这种指标因为该变量是各类别独有, 其位址就是一个方便的索引