Это называется инициализация списка , и вам нужен конструктор std :: initilizer_list , который должен быть достигнут в вашем MyClass
.
#include <initializer_list>
class MyClass
{
double *_v;
std::size_t _size;
public:
MyClass(std::initializer_list<double> list)
:_v(nullptr), _size(list.size())
{
_v = new double[_size];
std::size_t index = 0;
for (const double element : list)
{
_v[index++] = element;
}
};
~MyClass() { delete _v; } // never forget, what you created using `new`
};
int main()
{
auto x = MyClass({ 1.,2.,3. }); // now you can
//or
MyClass x2{ 1.,2.,3. };
//or
MyClass x3 = { 1.,2.,3. };
}
Также обратите внимание, что предоставление size_of_v
в конструкторе является избыточным, поскольку его можно получить из метода std :: initializer_list :: size .
Идля полноты следуйте правилу три / пять / ноль .
В качестве альтернативы, если вы можете использовать std::vector
, это можно сделать внамного более простой способ, при котором не требуется ручное управление памятью .Более того, вы можете достичь цели с помощью меньше кода и, не более избыточного _size
члена.
#include <vector>
#include <initializer_list>
class MyClass {
std::vector<double> _v;
public:
MyClass(std::initializer_list<double> vec): _v(vec) {};
};