как развернуть std :: reference_wrapper как boost :: unwrap_reference - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь портировать некоторый код, который часто использует 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, есть ли другой прямой способ сделать это?

РЕДАКТИРОВАТЬ: я немного прояснил пример

1 Ответ

5 голосов
/ 02 апреля 2012

Что-то вроде:

template< typename T >
struct UnwrapReference;

template< typename T >
struct UnwrapReference { typedef T type; }

template< >
struct UnwrapReference< std::reference_wrapper< T > > { typedef T type; }

Хотя и не проверено, но это суть того, как вы, вероятно, сможете это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...