Идеальная переадресация и реф-квалификаторы для функций-членов

В C ++ 11 появилась возможность переопределять функции-члены, а также совершенную пересылку. Но можем ли мы смешать их вместе?

Рассмотрим этот (рабочий) пример:

struct bar{
std::string str;
void do_stuff() & {
/* version 1 */
}
void do_stuff() && {
/* version 2 */
}
};

struct foo{
bar data;
void do_stuff() & {
data.do_stuff();
}
void do_stuff() && {
std::move(data).do_stuff();
}
};

int main(){
foo f;
f.do_stuff() // calls version 1 of bar::do_stuff()
std::move(f).do_stuff() // calls version 2 of bar::do_stuff()
}

внутри main()первый звонок вызывает версию 1 или bar::do_stuff() а второй звонок вызывает версию 2 или bar::do_stuff(), Существует некоторое дублирование кода в foo::do_stuff(), Если ref-квалификаторы были для аргумента, отличного от подразумеваемого *thisмы могли бы легко сделать идеальную пересылку:

template <typename T>
void do_stuff (T&& t) {
std::forward<T>(t).do_stuff();
}

Есть ли эквивалентный способ идеально переслать *this объект?

Примечание: если правильное решение существует только в C ++ 14 или C ++ 17, я был бы рад узнать и это.

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]