在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 ++中模拟上面的代码?
答案 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
正确,因此很难准确说出您的意思。)