Пример класса-обертки в С++ 20 с использованием концепцииstructible_from [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пример класса-обертки в С++ 20 с использованием концепцииstructible_from [дубликат]

Сообщение Anonymous »

Я хочу создать класс, который будет вести себя так же, как и класс, вокруг которого он находится. когда я пробую что-то вроде этого, я получаю ошибку компиляции:

Код: Выделить всё

#include
#include

template
struct wrapper{
C1 p1;
wrapper():p1(){}
wrapper(wrapper&& o): p1(std::move(o.p1)){}
~wrapper(){p1.~C1();}
template
wrapper(C... c)requires std::constructible_from:p1(std::forward(c)...){}
};
//using namespace set_model;
int main() {
using w=wrapper;
w a(5,1.2);
w b{std::vector{1.2,1.7,1.9}};
//w c{1.2,1.7,1.9}; error:no matching constructor
//w d{{1.2,1.7,1.9}}; error:no matching constructor
std::vector e{{1.2,1.7,1.9}};
return 0
}
конструкторы, найденные в исходном коде, похоже, здесь работают, но не Initializer_list! есть идеи, как заставить оболочку вести себя точно так же, как класс, который она обертывает, в данном случае std::vector? в b видно, что вектор инициализируется списком в фигурных скобках, в e также принимаются фигурные скобки внутри фигурных скобок. однако то же самое для класса-обертки не будет работать. нужно ли мне предоставить конструктор Initializer_list? почему созданный по умолчанию вариант не соответствует требованию?

Подробнее здесь: https://stackoverflow.com/questions/783 ... om-concept
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»