Я понимаю, что следующий код не будет работать, так как я - параметр времени выполнения, а не параметр времени компиляции. Но я хочу знать, есть ли способ добиться того же. у меня есть список классов, и мне нужно вызвать функцию шаблона с каждым из этих классов.
void
GucTable::refreshSessionParams()
{
typedef boost::mpl::vector< SessionXactDetails, SessionSchemaInfo > SessionParams;
for( int i = 0; i < boost::mpl::size<SessionParams>::value; ++i )
boost::mpl::at<SessionParams, i>::type* sparam =
g_getSessionParam< boost::mpl::at<SessionParams, i>::type >();
sparam->updateFromGucTable(this);
}
}
Может кто-нибудь предложить мне простой и элегантный способ сделать то же самое? мне нужно перебрать mpl :: vector и использовать тип для вызова глобальной функции, а затем использовать этот параметр для выполнения некоторых операций времени выполнения.
Спасибо заранее,
Gokul.
Рабочий код
typedef boost::mpl::vector< SessionXactDetails, SessionSchemaInfo > SessionParams;
class GucSessionIterator
{
private:
GucTable& m_table;
public:
GucSessionIterator(GucTable& table)
:m_table(table)
{
}
template< typename U > void operator()(const U& )
{
g_getSessionParam<U>()->updateFromGucTable(m_table);
}
};
void
GucTable::refreshSessionParams()
{
boost::mpl::for_each< SessionParams >( GucSessionIterator(*this) );
return;
}