- 1
- 2
- 3
- 4
- 5
template <typename T, typename U>
auto operator()(T&& t, U&& u) const
-> decltype(forward<T>(t) + forward<U>(u)) {
return forward<T>(t) + forward<U>(u);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1007
template <typename T, typename U>
auto operator()(T&& t, U&& u) const
-> decltype(forward<T>(t) + forward<U>(u)) {
return forward<T>(t) + forward<U>(u);
}
Не вижу тут никаких проблем с перегрузкой бинарного "+" для двух разных типов.
class string{
public:
string(){...}
string(const char *str){...}
string(const string& str){...}
...
string& operator+(const string& str){...}
string& operator+(const char *str){...}
}
string b = "aaaaa";
string a = "a" + b; // опа, не компилится.
а вот с оператором скомпилится, будет неявное преобразование.
Хотя в примере пестец.
отвлекали, ступил, криво написал, про friend функцию имел ввиду.
В С++ не может быть перегрузки операторов для исключительно стандартных типов, а здесь U и T могут быть стандартным.
Если же перегрузка operator+ будет производиться на глобальном уровне, то да, для стандартных типов работать не будет. Однако, если хотя бы один из них будет пользовательским типом, то всё ок.
Это верно, но я не понимаю в чем вопрос? Человеку нужно сделать функтор что-то складывающий - он это и сделал. Ему не нужен оператор +.
мне было лень регистрироваться и знакомый отдал мне этот ник, сказав что он особенный...
С чего ты взял? Нет. Просто мой знакомый.
>Сипипи двести тридцать второго...
RS-232?
Ну он мне сказал, что это не он. Он вообще интернеты не любит.
Очевидно же, что фаггот, создающий нытик-треды про "я ухожу навсигда" напиздил и ресетнул пассы. Они всегда одинаково пытаются подчеркнуть свою непохожесть на других.
Но эта фраза не настолько мементична.
сами знаете кто
forward<T>(t).operator+(forward<U>(u)) или operator+(forward<T>(t), forward<U>(u))? Для разных типов будет по-разному.
Но я все равно не понимаю, зачем знать где он определен.
"+" в данном контексте, означает одно(например, конкатенацию строк ) , а в другом контексте - другое (например, добавление свойств объекту)
http://mults.spb.ru/mults/?id=2305
Канонический пример запутывания:
Главное условие - чтобы в прикладной области было принято такое трактование.
Киллер-фичей Фортрана в своё время была возможность записи арифметических выражений в естественной форме. Теперь это есть в 99.9% языков и воспринимается как само собой разумеющееся.
forward<T>(t).operator+(forward<U>(u)) или operator+(forward<T>(t), forward<U>(u))?
Ай йа йай. В своем языке плюсисты разобраться не можете...
что это за поебень? из сипипоха?
http://img-fotki.yandex.ru/get/3210/eugenio19.1d/0_200da_e1c2bc99_L.jpg