Ciao a tutti.
Sto riprovando a creare una classe di vettori matematici particolarmente ben fatta (spero non sia troppo difficile). Questa é l'interfaccia che ho scritto (non ho ancora cominciato l'implementazione). Cosa ne pensate? Ci sono tutte le funzioni necessarie? La move semantics é corretta?

Grazie mille,
R.

Ps: È la prima volta che uso i templates e non ho compilato...

Pps: Vorrei creare anche una classe Matrix... Consigliate di partire da quella e derivare Vector ma Matrix?



codice:
#ifndef VECTOR_H
#define VECTOR_H

#include <iostream>
#include <utility>
#include <vector>
#include <initializer_list>

template <typename T>
class Vector
{
	// --- External Operators ---
	friend Vector<T> operator*(const T&, const Vector<T>&);
    friend Vector<T> operator*(const vector<T>&, const T&);
    friend std::ostream& operator<<(std::ostream&, const Vettore&);

public:
	// --- Constructors ---
	Vector<T>();
	Vector<T>(size_t);
	Vector<T>(const T&, const T&);
	Vector<T>(T&&, T&&);
	Vector<T>(const T&, const T&, const T&);
	Vector<T>(T&&, T&&, T&&);
	Vector<T>(const std::vector<T>&);
	Vector<T>(const std::initializer_list<T>&);
	Vector<T>(const Vector<T>&);
	Vector<T>(std::vector<T>&&);
	Vector<T>(std::initializer_list<T>&);
	Vector<T>(Vector<T>&&);
	
	// --- Inner Operators ---
	Vector<T>& operator=(const Vector<T>&);
	Vector<T>&& operator=(Vector<T>&&);
	
	T& operator()(int);
	const T& operator()(int) const;
	
	bool operator==(const Vettore<T>&) const;
	bool operator!=(const Vettore<T>&) const;
	
	Vector<T>& operator+=(const Vector<T>e&);
    Vector<T>& operator-=(const Vector<T>&);
    Vector<T> operator+(const Vector<T>&) const;
    Vector<T> operator-(const Vector<T>&) const;
    Vector<T> operator-() const;
   	T operator*(const Vector<T>&) const;
	
	// --- Methods ---
	void set();
	void set(const T&);
	
	size_t size() const;
	
	T norm() const;
	
	
private:
	// --- Attributes ---
	std::vector<T> vector;
};

#endif