у меня есть, например, класс-оболочка:Совершенная пересылка для классов-оболочек
template <typename T>
struct Wrapper {
T t;
};
и некоторые прокси-класс, который принимает что-то делает с T
:
template <typename T>
struct Proxy {
T t;
void operator()() const {/* .... */}
}
Теперь есть для удобства метод, который создает прокси, и я написал перегруженный его для ссылки на l- и r-значение:
template <typename T>
Proxy<const T &> createProxy(const Wrapper<T> &w) {return {w.t};}
template <typename T>
Proxy<T> createProxy(Wrapper<T> &&w) {return {std::move(w.t)};}
Это, конечно, только урезанный код, который я хотел использовать, но, чтобы сделать все более удобным для чтения, я хочу использовать некоторую идеальные пересылки магию, что приводит к меньшему количеству коды делает все немного более удобное для чтения:
template <typename Wrapper>
Proxy</* ??? */> createProxy(Wrapper &&w) { /* ??? */ }
Так вопрос в том, как я могу вычесть тип l- или r-значения члена типа l- или r-значения?
Я не уверен, что вы пытаясь спросить (и тем более, почему вы только обходите это в течение последних 1 до не более 3 абзацев). – Deduplicator