[語法] 請問如何宣告 nested class?

看板C_and_CPP (C/C++)作者 (............￾ ￾NN￾)時間16年前 (2009/08/27 00:14), 編輯推噓0(0012)
留言12則, 2人參與, 最新討論串1/1
原始碼大概如下表示 template < template < class > class Policy > class Object : public Policy< Object::Node > ~~~~~~~~~~~~ 這邊因為Node沒宣告所以無法編譯 { class Node {}; }; 請問如何宣告 Nested class 或是 別的解決的方式 @_@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.233.54

08/27 00:19, , 1F
幹嘛這樣寫,你就直接 Policy<Object> 這樣傳不就好了?
08/27 00:19, 1F

08/27 00:19, , 2F
把 Policy 的設計改一改就可以 work 了。
08/27 00:19, 2F

08/27 00:21, , 3F
哦,看錯,你的 Policy 是 template template 不能這樣 XD
08/27 00:21, 3F

08/27 00:23, , 4F
譬如說Policy 是一個 alloctor 我要 alloc 的試 Node 不是Obj
08/27 00:23, 4F

08/27 00:26, , 5F
如果修改Policy設計那麼 有現成可以用的 class 變成不能用了
08/27 00:26, 5F

08/27 00:28, , 6F
policy 是這種東西的話,你大概只能把 Node 提到外面去。
08/27 00:28, 6F

08/27 00:31, , 7F
因為在 Policy<> 裡面 compiler 沒辦法幫你展開 Object。
08/27 00:31, 7F

08/27 00:36, , 8F
看來只剩這個方法了 囧
08/27 00:36, 8F

08/27 00:37, , 9F
通常這樣設計 policy,你至少還要增加一個 template
08/27 00:37, 9F

08/27 00:38, , 10F
parameter 去引導後面的 template parameters,不能把
08/27 00:38, 10F

08/27 00:38, , 11F
host 直接丟到 policy 的 template arg list 上。
08/27 00:38, 11F

08/27 00:40, , 12F
除非你以合成代替繼承,才能這樣設計,但是會失去擴充性。
08/27 00:40, 12F
文章代碼(AID): #1AbLzRkv (C_and_CPP)
文章代碼(AID): #1AbLzRkv (C_and_CPP)