我有兩個函數在比較傳遞給函數的兩個值之後返回一個布爾值。現在問題是我們如何使用以下兩個函數來編寫typedef來表徵它們並定義一個新類型?在C++中使用typedef來總結和定義一個具有兩個函數的新類型
functions:
bool compare1(float n1, float n2){
return n1<n2;
}
bool compare2(int n1, int n2){
return n1<n2;
}
我有兩個函數在比較傳遞給函數的兩個值之後返回一個布爾值。現在問題是我們如何使用以下兩個函數來編寫typedef來表徵它們並定義一個新類型?在C++中使用typedef來總結和定義一個具有兩個函數的新類型
functions:
bool compare1(float n1, float n2){
return n1<n2;
}
bool compare2(int n1, int n2){
return n1<n2;
}
也許你想要做這樣的事情:
template<typename T>
bool compare(T n1, T n2){
return n1 < n2;
}
我沒有看到一個typedef做得多好這裏,但模板肯定能:
template <class T>
bool compare(T n1, T n2) {
return n1 < n2;
}
注意這與std::less<T>
已經提供的幾乎相同,只是std::less<T>
有專門的功能,所以它可以與某些類型一起工作,其中n1<n2
不一定給出意思充滿希望的結果。這意味着這種確切的情況不是很實際,但其他一般想法的情況可以。
對於原始案例,您無法真正使用typedef
。您可以創建一個指針的類型typedef
到的功能之一:
typedef bool (*ptr_func)(int, int);
但仍然需要指定的參數類型,所以你不能用它來指代採用int
參數函數和功能需要參數float
。你可以創建一個typedef
作爲一個函數的指針,它帶有一個可變參數列表,但即使這樣的函數可能帶有參數int
或float
參數,該指針也不適合引用任何一個函數,已經給出。
[用Piotr S解答]中的'using'語法(http://stackoverflow.com/a/25826918/509868)非常接近'typedef';有些人實際上稱它爲'typedef',即使它裏面有另一個關鍵字。 – anatolyg 2014-09-13 19:45:42
@anatolyg:是的,從C++ 11開始,'using'可以給出類似於'typedef'的結果。這完全不清楚,它甚至完成了與OP真正想要的內容相似的任何內容。它可能,但我不確定。 – 2014-09-13 19:50:42
如果你真的希望有別名(又名的typedef),那麼這就是:
bool compare1(float n1, float n2){
return n1<n2;
}
bool compare2(int n1, int n2){
return n1<n2;
}
template <typename T>
using Alias = bool(*)(T,T);
int main()
{
Alias<float> a = compare1;
std::cout << a(3.14f, 5.12f) << std::endl;
Alias<int> b = compare2;
std::cout << b(1, 2) << std::endl;
}
使用模板和[C++ 11] [using-declaration]的良好示例(但可能會造成這種情況)。 – augustin 2015-09-14 00:48:09
你想要什麼來實現這樣的類型定義? – 2014-09-13 19:26:52
真的不明白你在問什麼,但'typedef'沒有定義一個新類型,它創建了一個別名 – 2014-09-13 19:28:44
這聽起來像你可能想看看某種[多態](https:// www .cs.bu.edu/teaching/cpp/polymorphism/intro /),特別是[overloading](而不是typedefs)。 – skrrgwasme 2014-09-13 19:33:51