2010-05-21 29 views
1

在C#中,我使用Func來替換工廠。例如:如何在C++中模擬Func <T1,T2,TResult>?

class SqlDataFetcher  
{ 
    public Func<IConnection> CreateConnectionFunc; 

    public void DoRead() 
    { 
     IConnection conn = CreateConnectionFunc(); // call the Func to retrieve a connection 
    } 
} 

class Program  
{ 
    public void CreateConnection() 
    { 
     return new SqlConnection(); 
    } 

    public void Main() 
    { 
     SqlDataFetcher f = new SqlDataFetcher(); 
     f.CreateConnectionFunc = this.CreateConnection; 
     ... 
    } 
} 

如何可以模擬在C++上面的代碼?

回答

4

使用std::tr1::function<IConnection*()>boost::function<IConnection*()>作爲等效於Func<IConnection>

當您分配函數時,您需要將對象和函數綁定在一起;

f.CreateConnectionFunc = this.CreateConnection; 

將成爲

f.CreateConnectionFunc = std::tr1::bind(&Program::CreateConnection,this); 

(即假定CreateConnection不是一個靜態的功能 - 你的示例代碼沒有得到其statics正確的,所以這是很難說你的意思是什麼)。

+1

+1,但'boost :: function '(注意指針)。 – avakar 2010-05-21 09:26:51

+0

好點。而你可能會想要返回一個智能指針來明確所有權。 – 2010-05-21 09:29:35

+0

如此之快的回覆。謝謝! – Zach 2010-05-21 09:32:44

相關問題