替代函数包装器
Substitute for function wrappers
我有一个管理两个连接(源和目标)的 C++ class。连接上的每个操作都是两个阶段的,准备阶段和提交阶段。我想在两个连接上执行的一些操作并使用几乎相同的参数。
即
mngr::init_conn(int var1, int var2, int var3)
{
m_conn.prepare_init(source_id, var1, var2, var3);
m_conn.commit();
m_conn.prepare_init(target_id, var1, var2, var3);
m_conn.commit();
}
mngr::update_conn(int var1, int var2)
{
m_conn.prepare_update(source_id, var1, var2);
m_conn.commit();
m_conn.prepare_update(target_id, var1, var2);
m_conn.commit();
}
注意同一个连接对象管理源连接和目标连接。 connection对象不是我的,不能改
有没有办法去除方法中的重复代码?我考虑过包装方法,但我想知道是否有一种方法可以不为每个函数生成函数包装器
我想到了这样的事情:
mngr::init_wrapper(ID id,int var1, int var2, int var3)
{
m_conn.prepare_init(id, var1, var2, var3);
m_conn.commit();
}
mngr::update_wrapper(ID id,int var1, int var2)
{
m_conn.prepare_update(id, var1, var2);
m_conn.commit();
}
mngr::init_conn(int var1, int var2, int var3)
{
init_wrapper(source_id, var1, var2, var3);
init_wrapper(target_id, var1, var2, var3);
}
mngr::update_conn(int var1, int var2)
{
update_wrapper(source_id, var1, var2);
update_wrapper(target_id, var1, var2);
}
您有没有为每个函数生成函数包装器的方法?
远程 for
超过 std::initializer_list
怎么样?
mngr::init_conn(int var1, int var2, int var3)
{
for (auto id : {source_id, target_id})
{
m_conn.prepare_init(id, var1, var2, var3);
m_conn.commit();
}
}
如果需要更改for
里面的id
,应该改成auto &id
,否则更改会被丢弃。
我有一个管理两个连接(源和目标)的 C++ class。连接上的每个操作都是两个阶段的,准备阶段和提交阶段。我想在两个连接上执行的一些操作并使用几乎相同的参数。
即
mngr::init_conn(int var1, int var2, int var3)
{
m_conn.prepare_init(source_id, var1, var2, var3);
m_conn.commit();
m_conn.prepare_init(target_id, var1, var2, var3);
m_conn.commit();
}
mngr::update_conn(int var1, int var2)
{
m_conn.prepare_update(source_id, var1, var2);
m_conn.commit();
m_conn.prepare_update(target_id, var1, var2);
m_conn.commit();
}
注意同一个连接对象管理源连接和目标连接。 connection对象不是我的,不能改
有没有办法去除方法中的重复代码?我考虑过包装方法,但我想知道是否有一种方法可以不为每个函数生成函数包装器
我想到了这样的事情:
mngr::init_wrapper(ID id,int var1, int var2, int var3)
{
m_conn.prepare_init(id, var1, var2, var3);
m_conn.commit();
}
mngr::update_wrapper(ID id,int var1, int var2)
{
m_conn.prepare_update(id, var1, var2);
m_conn.commit();
}
mngr::init_conn(int var1, int var2, int var3)
{
init_wrapper(source_id, var1, var2, var3);
init_wrapper(target_id, var1, var2, var3);
}
mngr::update_conn(int var1, int var2)
{
update_wrapper(source_id, var1, var2);
update_wrapper(target_id, var1, var2);
}
您有没有为每个函数生成函数包装器的方法?
远程 for
超过 std::initializer_list
怎么样?
mngr::init_conn(int var1, int var2, int var3)
{
for (auto id : {source_id, target_id})
{
m_conn.prepare_init(id, var1, var2, var3);
m_conn.commit();
}
}
如果需要更改for
里面的id
,应该改成auto &id
,否则更改会被丢弃。