2010-04-14 53 views
7

假設以下兩種功能:C++:綁定的聯合?

#include <iostream> 
#include <cstdlib> // atoi 
#include <cstring> // strcmp 
#include <boost/bind.hpp> 

bool match1(const char* a, const char* b) { 
    return (strcmp(a, b) == 0); 
} 

bool match2(int a, const char* b) { 
    return (atoi(b) == a); 
} 

這些函數有兩個參數,但可以轉變爲一個可調用對象,通過使用(STD /升壓)bind只有一個參數。我希望能夠獲得,從這樣的就是有一個參數和返回bool,Callable對象有兩個參數,並返回& &的bool的兩個功能

boost::bind(match1, "a test"); 
boost::bind(match2, 42); 

:沿東西線s。參數的類型是任意的。

對於返回bool的函數,類似operator&&

+0

難道你不想要一個函數接受一個參數並返回一個布爾值嗎?即相當於'match1(「測試」,X)&& match2(42,X)'?或者你真的想'match1(「test」,X)&& match2(42,Y)'? – 2010-04-14 15:47:08

+0

我真的想要一個帶有兩個參數的函數。 – 2010-04-15 09:11:05

回答

9

返回類型boost::bind過載operator &&(以及many others)。所以你可以寫

boost::bind(match1, "a test", _1) && boost::bind(match2, 42, _2); 

如果你想存儲這個值,使用boost::function。在這種情況下,該類型是

boost::function<bool(const char *, const char *)> 

請注意,這不是boost::bind返回類型(即未指定的),但正確的簽名任何仿函數可以轉換爲boost::function

+0

@sth,編輯好建議 – 2010-04-14 16:27:38

+0

我可以有一個函數返回'boost:bind'類型的東西嗎? – 2010-04-15 09:11:45

+1

@Helltone,好問題 - 看我編輯 – 2010-04-15 16:54:30