2015-12-01 2 views
1

Я работаю над пользовательской библиотекой. До сих пор я завернул std :: tuple и std :: tie в свой собственный myOwn :: Tuple и myOwn :: tie. Они функционируют так же, как и std :: tuple и std :: tie. Я хотел бы сделать что-то подобное с std :: ignore.Wrapping std :: ignore

До сих пор, я написал следующее:

namespace myOwn 
{ 
    auto 
    tilde() 
    -> decltype(std::ignore) 
    { 
     return std::ignore; 
    } 
} 

Моя единственная проблема в том, что я теперь должен использовать myOwn :: тильды() в скобках. Я хотел бы иметь возможность использовать это как myOwn :: tilde. До сих пор все, что я читал на станд :: игнорировать то, как использовать его,

Здесь: Possible implementations of std::ignore

Здесь: Requirements for std::ignore

И здесь: C++: Return type of std::tie with std::ignore

Я попытался с помощью

, но это не удалось. Любая помощь будет оценена по достоинству. Этот вопрос может быть полезен для всех, кто пытается обернуть объекты.

+0

Как вы думаете, 'std :: ignore' есть? A * type * или * object *? – Nawaz

+5

Почему вы обертываете std вещи?? –

+0

Есть ли проблема с 'auto tilde = std :: ignore;'? –

ответ

5

Если вам не нужно изменять std::ignore, и просто хотите переименовать его, а затем

decltype(std::ignore) &tilde = std::ignore; 

в области видимости пространства имен должны делать то, что вам нужно.

std::ignore не гарантируется DefaultConstructible или CopyAssignable, поэтому его нельзя будет изготовить или скопировать, а мы сохраним ссылку на него. Тип этого tilde - decltype(std::ignore) &, но так как std::tie принимает ссылки, это должно функционировать так же, как std::ignore.

+2

или 'decltype (std :: ignore) & tilde = std :: ignore;' для создания псевдонима вместо другой копии. Вышеизложенное предполагает, что тип 'std :: ignore' может быть сконструирован вами. – Yakk

+0

@Yakk Хорошая мысль, я отредактировал свой ответ. Вы можете сделать ответ с этой коррекцией. – Chaos

+0

Это imho, только уточнение вышеупомянутого ответа. Исправьте это, и мне не нужно! – Yakk