2015-11-10 119 views
1

我發現在Alexandrescu的書這種類型的特點,我不知道如何來理解這個規範什麼(struct PToMTraits <U V::*>)模板規範是什麼意思?

template <typename T> 
class TypeTraits 
{ 
private: 
template <class U> struct PToMTraits 
{ 
enum { result = false }; 
}; 
template <class U, class V> 
struct PToMTraits<U V::*> 
{ 
enum { result = true }; 
}; 
public: 
enum { isMemberPointer = PToMTraits<T>::result }; 
... 
}; 
+0

[this_link](http://stackoverflow.com/questions/580922/identifying-primitive-types-in-templates)可能會幫助你理解。 – Sigstop

回答

3

這是一個P ointer 中號燼檢查,因此PTOM

它檢查傳入的類型是否是指向數據成員類型(或不是)。它通過提供一個主模板,其是resultfalse在任何類型的匹配U V::*一個偏特執行此(即是一個指向任何類型V的任何U類的數據成員),其resulttrue

+0

謝謝你的回答!你能解釋爲什麼這個「U V :: *」代表指向屬於U的類型V的數據成員的指針嗎?這個語法看起來不像C++ :) – Scipio

+0

@Scipio這就是語法。 – Barry

+0

好的,我在這裏找到了一個清晰的例子:http://en.cppreference.com/w/cpp/language/template_parameters(在頁面底部),並最終了解它。 – Scipio