Я создал шаблон класса, который инициализирует простой массив, используя расширение пакета параметров, и у класса есть конструктор копирования для моей функции, который принимает объект этого класса. Инициализация работает, но при передаче объекта в мою функцию вызывается конструктор инициализации, а не конструктор копирования.
Как я могу заставить мою функцию использовать правильный конструктор, чтобы иметь возможность передавать объект по значению?
Работа с c ++ 17.
Мой класс выглядит следующим образом:
template<typename I, std::size_t val>
class myClass{
public:
std::array<I, val> data;
template<typename ...T>
constexpr myClass(T&& ... elem) : data{elem...}{};
/*copy c'tr*/
template<typename T, std::size_t value>
constexpr myClass(myClass<T, value> mObj){
data = mObj.data;
}
};
struct myStruct{
myClass<int, 5> aC{1,2,3,4,5};
};
template<typename I, std::size_t val>
constexpr auto myfunction(myClass<T, val> obj){
int a = obj.data[0];
return a;
}
Это мой основной:
int main() {
myStruct myStructObj;
auto myvalue = myfunction(myStructObj.aC);
return 0;
}
В конце , мое сообщение об ошибке:
tensor.h: In instantiation of ‘constexpr myClass<I, val>::myClass(T&& ...) [with T = {myClass<int, 5>&}; I = int; long unsigned int val = 5]’:
main.cpp:72:30: required from here
tensor.h:188:51: error: cannot convert ‘myClass<int, 5>’ to ‘int’ in initialization
188 | constexpr myClass(T&& ... elem) : data{elem...}{};
|
^