我知道下面的代碼將不起作用,因爲我是運行時參數而不是編譯時參數。但我想知道,是否有辦法達到同樣的效果。我有一個類的列表,我需要調用一個模板函數,每個類。C++ boost mpl vector
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;
}
謝謝。有效。 – Gokul 2010-06-04 20:25:20