Я хочу создать класс, который будет вести себя так же, как и класс, вокруг которого он находится. когда я пробую что-то вроде этого, я получаю ошибку компиляции:
Код: Выделить всё
#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