テンプレート引数によって、行ベクトルクラスと列ベクトルクラスを
定義しています。

struct row_major{};
struct col_major{};

template< typename major_type > struct vector_t{float x,y,z,w};

typedef vector_t< row_major > rvector_t;
typedef vector_t< col_major > cvector_t;

rvector_tからcvector_tへ変換(転置)したい場合、
単なるキャストで良いのでしょうか?
rvector_t* prv;
cvector_t* pcv = (cvector_t*)prv;

それともクラスのフォーマットが同じである保障が無い為、
専用の変換関数が必要になるでしょうか?
rvector_t rv;
cvector_t cv = transpose(rv);