2014-04-03 29 views
1

所以我有以下代碼:如何使用C++中的typedef函數指針必須返回類模板?

typedef Shape *(createShapeFunction)(void); 

的問題是,形狀是一個模板,所以我想它是這樣的:

typedef Shape<T> *(createShapeFunction)(void); 

我已經嘗試以下

typedef template<typename T> Shape<T> *(createShapeFunction)(void); 

template<typename T> typedef Shape<T> *(createShapeFunction)(void); 

它給了我錯誤,說這是不允許的。 你能幫忙嗎?

+1

in C++ 11'using'應該用來代替'typedef' –

+0

@BryanChen我會用它,但我很沮喪地使用新標準,所以我想嘗試不太現代的方法 – ciprianr

+1

@ciprianr:不要讓他們勸阻你。 C++ 11非常棒! – Danvil

回答

3

試試這個:

template<typename T> 
struct ShapeFunctionPointers { 
    typedef Shape<T> (*createShape)(void); 
}; 

ShapeFunctionPointers<int>::createShape f; 

請注意,每個類型T會有不同的函數指針類型。

在C++ 11,你應該能夠編寫:

template<typename T> using createShapeFunction = Shape<T> (*)(void); 

createShapeFunction<int> f; 
+0

這正是我一直在尋找的。 – ciprianr

+0

很高興幫助:) – Danvil

0

是,在C++ 11

template<typename T> using createShapeFunction = Shape<T> (*)(void); 

確實工作。這是最乾淨的方式。

相關問題