2014-09-13 34 views
0

我有兩個函數在比較傳遞給函數的兩個值之後返回一個布爾值。現在問題是我們如何使用以下兩個函數來編寫typedef來表徵它們並定義一個新類型?在C++中使用typedef來總結和定義一個具有兩個函數的新類型

functions: 
    bool compare1(float n1, float n2){ 
     return n1<n2; 
    } 

    bool compare2(int n1, int n2){ 
     return n1<n2; 
    } 
+0

你想要什麼來實現這樣的類型定義? – 2014-09-13 19:26:52

+0

真的不明白你在問什麼,但'typedef'沒有定義一個新類型,它創建了一個別名 – 2014-09-13 19:28:44

+0

這聽起來像你可能想看看某種[多態](https:// www .cs.bu.edu/teaching/cpp/polymorphism/intro /),特別是[overloading](而不是typedefs)。 – skrrgwasme 2014-09-13 19:33:51

回答

1

也許你想要做這樣的事情:

template<typename T> 
bool compare(T n1, T n2){ 
    return n1 < n2; 
} 
3

我沒有看到一個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作爲一個函數的指針,它帶有一個可變參數列表,但即使這樣的函數可能帶有參數intfloat參數,該指針也不適合引用任何一個函數,已經給出。

+0

[用Piotr S解答]中的'using'語法(http://stackoverflow.com/a/25826918/509868)非常接近'typedef';有些人實際上稱它爲'typedef',即使它裏面有另一個關鍵字。 – anatolyg 2014-09-13 19:45:42

+0

@anatolyg:是的,從C++ 11開始,'using'可以給出類似於'typedef'的結果。這完全不清楚,它甚至完成了與OP真正想要的內容相似的任何內容。它可能,但我不確定。 – 2014-09-13 19:50:42

2

如果你真的希望有別名(又名的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; 
} 

LIVE DEMO

+0

使用模板和[C++ 11] [using-declaration]的良好示例(但可能會造成這種情況)。 – augustin 2015-09-14 00:48:09

相關問題