Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
myCallback(response);
}
});
return result;
}
function myCallback(response) {
// Does something.
}
Вы определили явный конструктор копирования, но функции
Vector Vector::operator+(const Vector& v) const
и
Vector Vector::operator-(const Vector& v) const
должны возвращаться по значению и больше не могут из-за explicit
(в Другими словами, они не могут скопировать tmp
в возвращаемый объект).
Я также проверял новые вещи с C ++ 11 и обнаружил, что могу объявить мой конструктор как движущийся конструктор
blockquote>explicit Vector(const Vector&& v);
, и код компилируется просто отлично. Если я это сделаю, мне нужно иметь как скопировать, так и переместить конструкторы?Не уверен, что я понимаю, что вы имеете в виду здесь. У вас будет такая же проблема, если вы объявите только явный конструктор перемещения (что не позволит компилятору генерировать конструктор копии по умолчанию). Я не могу создать «компилируемый» код.
Возврат объекта по значению требует выполнения неявной конструкции копии. Создание явного исключения конструктора копии предотвращает это.
Это так, если компилятор не хочет ссылаться на конструктор копирования (например, оптимизацию возвращаемого значения).