下面的示例代碼在gcc下編譯並按我的希望工作。它允許我將一個具有函數定義的對象作爲模板參數進行實例化,但是該類能夠在函數中使用不同的類型,就好像它們分別作爲類型模板參數一樣傳遞。函數指針非類型模板參數轉換爲類型模板參數
template<class FuncSignature> class Obj;
template<class Type1, class Type2> class Obj<Type1 (Type2)>
{
public:
Type1 var1;
Type2 var2;
};
int main(int argc, char **argv)
{
Obj<char (int)> A;
A.var1 = 'a';
A.var2 = 3;
}
即使它似乎工作,我不知道這段代碼在做什麼。爲什麼此代碼可以工作並符合C++標準?
是的,它的法律, 當不確定,我試着http://www.comeaucomputing.com/tryitout/來檢查合規性。它由於部分模板專門化而起作用。 – Anycorn 2010-11-28 15:37:34
使用元編程,您可以使用Boost FunctionTypes庫實際提取有關函數類型(此處爲`char(int)`)的大多數信息:http://www.boost.org/doc/libs/1_45_0/libs/function_types/ doc/html/index.html它可能是硬編碼,但它是一個有趣的閱讀:) – 2010-11-28 20:00:42