开发平台(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 可以吧
}
};
百思不得其解,盼前辈解惑。
小妹先谢过了。