Вы можете использовать type_traits
и static_assert
, чтобы предотвратить создание экземпляров вашего класса, используя тип const
.
#include <type_traits>
template <class T>
class Vector2D
{
static_assert( !std::is_const<T>::value, "T must be non-const" );
T X;
T Y;
public:
Vector2D() : X( 0 ), Y( 0 )
{
}
Vector2D(T x, T y) : X( x ), Y( y )
{
}
};
int main()
{
Vector2D<int> v1( 10, 20 );
Vector2D<const int> v2( 10, 20 ); //static_assert fails
}
Кроме того, я изменил ваш класс, чтобы использовать списки инициализации членов в конструкторе для инициализации переменных членов. И я сделал x
и y
private
.