如何在C ++中模拟Func <t1,t2,=“”tresult =“”>?</t1,>

时间:2010-05-21 09:18:48

标签: c++

在C#中,我使用Func替换工厂。例如:

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 ++中模拟上面的代码?

1 个答案:

答案 0 :(得分:4)

使用std::tr1::function<IConnection*()>boost::function<IConnection*()>作为Func<IConnection>的等效内容。

当你来分配函数时,你需要将一个对象和一个函数绑定在一起;

f.CreateConnectionFunc = this.CreateConnection;

会变成

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

(假设CreateConnection不是静态函数 - 您的示例代码没有使其statics正确,因此很难准确说出您的意思。)