Я пытаюсь портировать некоторый код, который часто использует boost :: unwrap_reference на C ++ 11.Код вызывает много функций-членов, таких как
template< typename T, typename Y>
void initialize( T _t, Y y)
{
typename boost::unwrap_reference< T >::type & t = _t;
t.doSomethingNastyWithY( y );
}
// The function is called like this
struct DoSomething
{
template<typename Y>
void doSomethingNastyWithY(Y y)
{
// do stuff
}
};
struct Object {};
DoSomething s;
Object obj;
int main()
{
initialize( s, obj ); // Take a copy of DoSomething
initialize( boost::ref(s), obj ); // Uses DoSomething as reference
}
Я не смог найти эквивалент для boost :: unwrap_reference в STL, есть ли другой прямой способ сделать это?
РЕДАКТИРОВАТЬ: я немного прояснил пример