Đây là một vấn đề thú vị mà tôi đang nghĩ về một thời gian trước đây. Cho một struct
với một tổng hợp cơ bản:Khởi tạo tổng hợp phổ quát bởi các mẫu variadic
#include <array>
template <typename T, size_t N>
struct A
{
constexpr A() = default;
template <typename ... Ts>
constexpr A(const T& value, const Ts& ... values); // magic
std::array<T, N> arr; // aggregate
};
Làm thế nào bạn sẽ thực hiện variadic mẫu constructor A(const T& value, const Ts& ... values)
để
- chấp nhận cả hai giá trị của loại
T
và mộtA<T, N>
- khởi động đúng tổng hợp cơ bản dựa trên các giá trị được đại diện bởi các đối số đã thông qua
- tôn trọng năng lực của tổng
- hỗ trợ C 14 quy tắC++ constexpr và không giới thiệu bất kỳ chi phí thời gian chạy
Đáp ứng các yêu cầu trên, chúng ta có thể làm như sau:
int main()
{
A<int, 3> x(1, 2, 3);
A<int, 2> y(1, 2);
A<int, 6> a(x, 1, 2, 3);
A<int, 6> b(1, x, 2, 3);
A<int, 6> c(1, 2, x, 3);
A<int, 6> d(1, 2, 3, x);
A<int, 6> e(x, x);
A<int, 6> f(y, y, y);
return 0;
}
Giá trị kỳ vọng của 'y [2]' trong 'A y (1,2);' là gì? –
Điều gì về chi phí thời gian chạy của lời gọi hàm tạo? –
@VaughnCato cảm ơn cho việc bắt, đó là một loại sai, cập nhật bây giờ – plasmacel