2013-04-06 53 views
-8

好吧夥計!C++模板 - 傳遞班級成員

我在這裏有一個小問題,使其更簡單,這或多或少是它的樣子:

在window.h

template <ObjectType &x> 
class foo { stuff } 

game.h

class gameclass { ObjectType a; } 

main.cpp

gameclass mygame; 
foo<mygame.a> fooa; 

現在fooa以某種方式失敗,它不允許我發送mygame的成員'a'作爲模板參數。

現在我該如何發送一個類成員作爲模板參數?

謝謝

+6

它沒有任何意義。模板參數應該是* type *,而不是對象。如果你想要'a'的*類型*,那麼只要'foo fooa;'。 – 2013-04-06 21:34:15

+0

您的'foo'模板需要* type *。您正在傳遞在運行時計算的值。你如何期望在標記爲「stuff」的部分使用'x'?目前還不清楚你想要做什麼 – 2013-04-06 21:34:34

+3

你忘了閱讀你的C++書。 – 2013-04-06 21:35:46

回答

1

看來你想傳遞一個非類型模板參數,更具體地說,一個指針到成員。你想要的東西,你要用戶:

template<ObjectType gameclass::* ptr> 
struct foo 
// ... 

注意,將允許您訪問對象的成員只有當你有一個指向對象。

您可以更詳細地瞭解here (pointer-to-member as template parameter)here (pointer-to-members)

請注意,你不能的mygame.a值傳遞給你發佈的代碼模板,這是因爲:

  1. 模板參數編譯時,你的價值是運行時間。
  2. 非類型模板參數不能是任何對象類型,只能是整數(或枚舉),對象/函數的指針/引用或指向成員的指針。

編輯: 你已經改變了你的模板template<ObjectType& x>。這對於reference to object是正確的。但是,mygame.a不是一個參考,它是一個值。要指定成員,您必須使用語法&mygame::a,這會強制您使用指向成員的指針。