2011-07-30 103 views
18

是否有可能具有非類型模板參數,它實際上是指向類成員的指針?什麼我希望做的是像下面這樣:作爲模板參數的類成員指針

struct Person { 
    Dog dog; 
}; 

template <?? ptr> 
struct Strange { 
    // ... 
}; 

typedef Strange<&Person::dog> weird; 

我的工作至今讓我相信,這樣的事是可能的,但我很好奇,如果有人已經可以說,否則。

回答

26

從標準:

甲非類型模板參數應具有下列(任選CV-合格音響ED)類型之一:

  • 整數或枚舉類型,
  • 指針對象或指針功能,
  • 參照對象或引用函數,
  • 指向成員的指針。

所以這是允許的,而且似乎對g++這樣的工作:

template <Dog Person::*ptr> 
struct Strange { ... }; 
+9

謝謝!我可以進一步概括爲'template ',這對我很有用。我想我應該仔細閱讀標準的那一部分。 –

+2

有沒有什麼辦法可以排除前兩個參數A和B? – user1158559

+1

@ user1158559請參閱提案N3601。通過http://stackoverflow.com/questions/15148749/pointer-to-class-member-as-a-template-parameter –

相關問題