看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《yoco315 (眠月)》之銘言: : 而且感覺很智障,想了一下,可以把這個東西抽離。 : 變成這樣 : template < typename T > : struct dereference { : T v ; : typedef decltype(*v) type ; : } ; : template < typename IterType > : class Foo { : IterType i ; : typedef dereference<IterType>::type ValueType ; : } ; : 這樣就 Foo 看起來就聰明多了,而我反正根本不會去具現化 dereference, : 所以也不會有什麼 T 真的生出來,但是這個寫法還是有問題, : 因為 T 可能沒有 public default constructor。編譯便不會過。 : 又想了一下,最後改成 : template < typename T > : struct dereference { : T dummy() ; : typedef decltype(*dummy()) type ; 不是很了解這一行的意思,用gcc 4.5 測試也編不過 還是 y大 的意思是像下面這樣? template< typename IterType> struct deref { typedef decltype(*IterType()) ValueType; }; 這樣在 default ctor 為 private 的狀況下仍然可以運作 : } ; : template < typename IterType > : class Foo { : IterType i ; : typedef dereference<IterType>::type ValueType ; : } ; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.101.180
loveme00835:dummy 少了 static, 不過這樣可能出來參照型態 01/01 23:52
adxis:那可以 decltype(*T()+*T()); ... 搞笑用的 多謝l大 01/02 00:30
loveme00835:這樣除了 operator* 這操作, value_type 又必須提供 01/02 00:38
loveme00835:operator+ 了 @_@ 01/02 00:38
adxis:恩恩 所以說是搞笑的 XD 01/02 00:40