Tôi đang viết một phần mềm chung sẽ được tải lên nhiều biến thể khác nhau của cùng một phần cứng cơ bản. Tất cả chúng đều có cùng một bộ xử lý, nhưng với các thiết bị ngoại vi khác nhau và các chức năng riêng của chúng cần phải được thực hiện. Phần mềm sẽ biết biến thể nào sẽ chạy bằng cách đọc giá trị chuyển đổi phần cứng.Tạo kiểu động trong C++
Dưới đây là thực hiện hiện tại của tôi trong một nutshell:
class MyBase
{
public:
MyBase() { }
virtual run() = 0;
}
class VariantA : public MyBase
{
public:
VariantA() { }
virtual run()
{
// Run code specific to hardware Variant-A
}
}
class VariantB : public MyBase
{
public:
VariantB() { }
virtual run()
{
// Run code specific to hardware Variant-B
}
}
void main()
{
MyBase* variant;
uint_8 switchValue = readSwitchValue();
switch(switchValue)
{
case 0:
variant = new VariantA();
break;
case 1:
variant = new VariantB();
break;
}
variant->run();
}
Bây giờ này chỉ hoạt động tốt. Tôi đọc giá trị phần cứng và sử dụng câu lệnh switch để tạo lớp tương ứng mới.
Vấn đề là có rất nhiều biến thể mà tôi phải giải quyết. Hiện nay khoảng 15, với tiềm năng để thêm một 20-30 khác trong tương lai gần. Tôi đã thực sự đến với các câu lệnh chuyển đổi khinh thường chạy cho hàng trăm dòng, vì vậy tôi thực sự đang tìm kiếm một cách tốt hơn để làm điều này, có thể thông qua các mẫu.
Tôi muốn có thể sử dụng giá trị phần cứng của mình để tra cứu một loại và sử dụng loại đó để tạo đối tượng mới của tôi. Lý tưởng nhất là khi tôi thêm một biến thể mới, tôi tạo lớp mới, thêm loại lớp đó vào bảng tra cứu của tôi với giá trị phần cứng phù hợp và rất tốt để đi.
Điều này có thể thực hiện được không? Giải pháp tốt ở đây là gì?
Cá nhân, Tôi nghĩ rằng một khối "chuyển đổi/trường hợp" để tạo ra các lớp thích hợp có lẽ là một giải pháp tối ưu. Chỉ cần đặt câu lệnh trường hợp của bạn trong phương thức "factory" tĩnh trả về tham chiếu đến lớp cụ thể. IMHO ... Đây là một ví dụ tốt: http://stackoverflow.com/questions/7468104/factory-method-design-pattern – paulsm4
Phần cứng chỉ có thể biết được khi chạy? –
có xem [answer] cụ thể này (http://stackoverflow.com/questions/15977617/polymorphism-with-new-data-members/15978673#15978673), giải thích cách để xây dựng một nhà máy đối tượng bằng cách đăng ký các nhà thầu . Có thể đáng xem xét ý tưởng ban đầu được đề cập trong bài đăng. – didierc