# gate

2021年6月19日

このオブジェクトは、quantum_registerを操作する量子ゲートを表します 。

C ++サンプルプログラム：quantum_computing_ex.cpp

#include <dlib / quantum_computing.h>

```    template <long bits>
class gate : public gate_exp<gate<bits> >
{
/*!
REQUIREMENTS ON bits
0 < bits <= 30

WHAT THIS OBJECT REPRESENTS
This object represents a quantum gate that operates on bits qubits.
It stores its gate matrix explicitly in a dense in-memory matrix.
!*/

public:
gate(
);
/*!
ensures
- num_bits == bits
- dims == 2^bits
- #&ref() == this
- for all valid r and c:
#(*this)(r,c) == 0
!*/

gate (
const gate& g
);
/*!
ensures
- *this is a copy of g
!*/

template <typename T>
explicit gate(
const gate_exp<T>& g
);
/*!
requires
- T::num_bits == num_bits
ensures
- num_bits == bits
- dims == 2^bits
- #&ref() == this
- for all valid r and c:
#(*this)(r,c) == g(r,c)
!*/

const qc_scalar_type& operator() (
long r,
long c
) const;
/*!
requires
- 0 <= r < dims
- 0 <= c < dims
ensures
- Let M denote the matrix for this gate, then this function
returns a const reference to M(r,c)
!*/

qc_scalar_type& operator() (
long r,
long c
);
/*!
requires
- 0 <= r < dims
- 0 <= c < dims
ensures
- Let M denote the matrix for this gate, then this function
returns a non-const reference to M(r,c)
!*/

template <typename exp>
qc_scalar_type compute_state_element (
const matrix_exp<exp>& reg,
long row_idx
) const;
/*!
requires
- reg.nr() == dims
- reg.nc() == 1
- 0 <= row_idx < dims
ensures
- Let M represent the matrix for this gate, then this function
returns rowm(M*reg, row_idx)
(i.e. returns the row_idx row of what you get when you apply this
gate to the given column vector in reg)
!*/

static const long num_bits;
static const long dims;

};

```