Конструктор объекта требует аргументов twp от пользователя. Требуется, чтобы параметры могли быть разных типов, но можно предположить, что каждый тип реализует правильную семантику перемещения. (Настоящим примером является класс cube_spline, созданный с использованием объектов произвольного доступа [векторов] числовых данных, один для «x», другой для «y» или «f(x)».)
Кроме того, требуется, чтобы пользователь мог передать любой параметр либо для копирования объектом, либо для захвата без копирования с помощью семантики перемещения.
Следующее работает как для VC++ std::vector (Dinkumware), так и для пользовательского контейнера, который я написал. Это действительно так просто? Я думаю, что приведенный ниже код, вероятно, правильный, но у меня есть скрытые сомнения. У меня простой вопрос: "Правильный ли это код?" (А если нет, то как он может выйти из строя и как его переписать? считать неудачным)
#include <vector>
template<class V1, class V2>
class spline {
public:
spline(V1 v1, V2 v2) noexcept
: xv( std::move(v1))
, yv( std::move(v2))
{}
private:
V1 xv;
V2 yv;
};
int main() {
using dv = std::vector<double>;
using fv = std::vector<float>;
fv xx { 1.f, 1.5f, 1.7f, 2.f};
dv yy { 1, -1, 1.2, 3};
spline<fv, dv> sp(xx, std::move(yy));
// xx is now unchanged, but yy is empty, its contents
// having been moved by sp.
return 0;
}