Julila
@Julila
вечный студент / german version

Как создать обьект с std::initializer_list?

Привет всем
У меня есть класс с следующими конструкторами

public:
	std::vector<T>  v; 
	SearchVektor(){};
	SearchVektor(const initializer_list<T> & t ) {
		for( auto a : t) {
			v.push_back(a);
			}
		};

Есть метод
SearchVektor<unsigned int>  search ( T num) {
		 vector<int> liste;   // --------  search result 
		 int begin = 0;
		 int mitt = v.size()/2;
		 int end =  v.size();		   		  
		 thread t1(Work(begin, mitt, num,   std::ref(liste)));			// тут будет 	  liste заполнено 
		 thread t2(Work(mitt+1, end, num,    std::ref(liste)));
		 t1.join();
		 t2.join();
			 
	
		SearchVektor<T> t(liste) ;	 
		return 	 t; ;  ----> Моя цель
			 
			  }


Я хочу создать новый обьект используя vector и не писать новый конструктор при этом.
Как поступить ???

Спасибо всем !
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Это нельзя, initializer_list — это тонкая прослойка, позволяющая инициализировать вектор из линейного массива. Ни на что большее она не нужна.

У вас есть какая-то странность — SearchVektor<unsigned int> мы инициализируем из вектора vector<int>. Это вообще ни в какие ворота не пишется. Для данного случая вам нужно…

1. vector<int> liste превратить в vector<unsigned int>.
2. Написать конструктор, работающий из временного вектора: SearchVektor(std::vector<T> && t ). Такой конструктор будет очень быстрым, ибо дерёт всю информацию из t, оставляя в нём пустоту.
3. Объявить liste временным —
return  SearchVektor< unsigned  int> (std::move(liste));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы