Initialize a long pair vector with initialization Ints list

Suppose I have a simple class:

class Pvector
{
  private:
  std::vector<long double> point_list;

  public:
  Pvector(std::initializer_list<long double> coords) : point_list(coords)
  {}
  Pvector(std::initializer_list<int> coords) : point_list(coords)
  {}
};

This will not compile because the std::vectortemplated on type template long doublecannot be initialized from an initialization list configured by type int. This is rather inconvenient, however, since when removing the second constructor, I cannot do the following in my code:

Pvector piece_movement({E.X - S.X, E.Y - S.Y, E.Z - S.Z});

, int. , , . Pvector, , point_list long double (- ) , . ?

+4
2

1

- PVector

 Pvector v2{1, 2};

:

#include <initializer_list>
#include <vector>

class Pvector
{
  private:
  std::vector<long double> point_list;

  public:
  Pvector(std::initializer_list<long double> coords) : point_list(coords)
  {}
};

int main()
{
   Pvector v1{1.0, 2.0};
   Pvector v2{1, 2};
}

2

PVector std::vector, point_list.

#include <initializer_list>
#include <vector>

class Pvector
{
  private:
  std::vector<long double> point_list;

  public:

  // This is not necessary any more.
  // Pvector(std::initializer_list<long double> coords) : point_list(coords){}

  template <typename T>
  Pvector(std::initializer_list<T> coords) : point_list(coords.begin(), coords.end()){}
};

int main()
{
   Pvector v1{1.0, 2.0};
   Pvector v2{1, 2};
}
+4

, narrowing conversion warning, ?

:

++ 11 8.5.4/7 - [...] [...] , , , , .

, , , , . , (float, double, long-double) .

+2

Source: https://habr.com/ru/post/1684436/


All Articles