Tôi thường có một số hành vi nguyên mẫu tạo ra đầu ra dựa trên một số phương pháp thiết kế. Tôi mẫu phương pháp thiết kế, cho phép nhiều chức năng tôi cần. Tuy nhiên, đôi khi các phương pháp thiết kế được đưa ra trong thời gian chạy, vì vậy tôi thường được yêu cầu viết một tuyên bố chuyển đổi rất lớn. Nó thường trông như thế này:Thực hiện chức năng số nguyên templated dựa trên tham số thời gian chạy
enum class Operation
{
A, B
};
template<Operation O>
void execute();
template<>
void execute<A>()
{
// ...
}
template<>
void execute<B>()
{
// ...
}
void execute(Operation o)
{
switch (o)
{
case Operation::A: return execute<Operation::A>();
case Operation::B: return execute<Operation::B>();
}
}
tôi tò mò về việc liệu có ai đã tìm ra một mô hình tốt đẹp cho hệ thống này - những hạn chế chính của phương pháp này là người ta phải gõ ra tất cả các kiểu liệt kê được hỗ trợ và làm bảo trì một số nơi nếu liệt kê mới được thực hiện.
e: Tôi nên thêm rằng các lý do gây rối với các mẫu biên dịch thời gian là cho phép trình biên dịch các phương thức nội tuyến trong HPC cũng như kế thừa các thuộc tính constexpr.
e2: có hiệu lực, tôi đoán những gì tôi yêu cầu là để trình biên dịch tạo tất cả các đường dẫn mã có thể bằng cách sử dụng cấu trúc chuyển đổi ngầm. Có lẽ một số phép thuật đệ quy mẫu?
Điều gì về việc sử dụng thừa kế và đa hình? –
Như tôi vừa bổ sung, điều quan trọng đặc biệt là trình biên dịch có thể thực hiện việc inlining và tối ưu hóa tại thời gian biên dịch (tức là toàn bộ cấu trúc mã có thể nhìn thấy và xác định). Nếu không có, các chức năng ảo rõ ràng sẽ giải quyết được vấn đề. – Shaggi