#include <Eigen/Core>
#include <iostream>

class MyVectorType : public Eigen::VectorXd {
 public:
  MyVectorType(void) : Eigen::VectorXd() {}

  // This constructor allows you to construct MyVectorType from Eigen expressions
  template <typename OtherDerived>
  MyVectorType(const Eigen::MatrixBase<OtherDerived>& other) : Eigen::VectorXd(other) {}

  // This method allows you to assign Eigen expressions to MyVectorType
  template <typename OtherDerived>
  MyVectorType& operator=(const Eigen::MatrixBase<OtherDerived>& other) {
    this->Eigen::VectorXd::operator=(other);
    return *this;
  }
};

int main() {
  MyVectorType v = MyVectorType::Ones(4);
  v(2) += 10;
  v = 2 * v;
  std::cout << v.transpose() << std::endl;
}
