作者Fenikso (ばかちーは俺の嫁)
看板C_and_CPP
標題Re: [問題] template
時間Thu May 7 04:47:21 2009
※ 引述《yuchili》之銘言:
c++沒有聰明到會自己列出所有member
只能用暴力法
template<typename T, int T::* p1, int T::* p2> T NewElement() {
T t;
t.*p1 = rand();
t.*p2 = rand();
return t;
}
template<typename T> T NewElement() {}
template<> A NewElement<A>() {return NewElement<A, &A::a, &A::b>();}
template<> B NewElement<B>() {return NewELement<B, &B::s, &B::t>();}
int main() {
A a = NewElement<A>();
B b = NewElement<B>();
}
這樣做並不會比較爽 還不如用正常的方法寫XD
另外 用c++0x的Variadic templates可以寫出更暴力的東西:
struct A {int a, b, c;};
struct B {int s, t;}
template<class T> T NewElement() {
return T();
}
template<class T, int T::* p, int T::*... args> T NewElement() {
T t = NewElement<T, args...>();
t.*p = rand();
return t;
}
int main() {
NewElement<A, &A::a, &A::b, &A::c>();
NewELement<B, &B::s, &B::t>();
}
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.156.17
※ 編輯: Fenikso 來自: 122.116.156.17 (05/07 05:02)
→ yuchili:喔~~~原來如此...害我以為是漏掉哪裡沒讀(有語法之類的) 05/07 12:39
→ yuchili:謝謝^^ 05/07 12:40