#include <iostream>
struct X2
{
int i;
int j;
char buf[10];
};
X2 glob{1,2,"abc"}; // OK
struct X
{
X2 x2;
template<typename... Args>
X(Args&&... args): x2{args...} {}
};
int main()
{
X x; // OK
X y{1, 2}; // OK
X z{1, 2, "abc"}; // error
}
Dòng cuối cùng cho lỗi: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
Perfect chuyển tiếp không thành công khi mục tiêu là tổng hợp với mảng
Nếu tôi sử dụng std::forward(args)...
thay vì args...
sau đó thậm chí còn nhiều lỗi đưa ra; và cũng có lỗi nếu tôi cố gắng sử dụng {'a', 'b', 'c', '\0'}
làm trình khởi tạo thay cho chuỗi ký tự.
Có cách nào để thực hiện công việc này, tức là cho phép X z{......};
có bất kỳ điều gì bên trong niềng răng sẽ là trình khởi tạo hợp pháp cho x2
, được chấp nhận và thực tế khởi tạo x2
?
"* Có cách nào để thực hiện tác vụ này" *, xóa hàm tạo hay sử dụng 'std :: string' làm kiểu' buf' –
viết '' a ',' b ',' c ',' \ 0'' thay vì '" abc "' hoạt động với VS sử dụng C++ 17 –