나는 런타임 매개 변수이며 컴파일 타임 매개 변수가 아니므로 다음 코드는 작동하지 않는다는 것을 알고 있습니다. 그러나 나는 같은 것을 성취 할 수있는 방법이 있는지 알고 싶습니다. 나는 클래스 목록을 가지고 있으며, 나는이 클래스들 각각과 함께 템플릿 함수를 호출해야한다.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를 반복하고 전역 함수를 호출 한 다음 해당 매개 변수를 사용하여 런타임 작업을 수행해야합니다.
미리 감사드립니다. 고쿨.
난 단지 BOOST_AUTO_TEST_CASE_TEMPLATE
에 대한 유형의 컬렉션에 대한 MPL을 사용
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