Làm cách nào để tôi có thể đơn giản hóa Mã này?Làm cách nào để đơn giản hóa biến "tham số mẫu này" trong C++?
mfer::i_value* make_empty_value(mfer::tag tag_)
{
if (tag_ == mfer::tag::mwf_ble) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_ble>());
} else if (tag_ == mfer::tag::mwf_chn) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_chn>());
} else if (tag_ == mfer::tag::mwf_blk) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_blk>());
} else if (tag_ == mfer::tag::mwf_seq) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_seq>());
} else if (tag_ == mfer::tag::mwf_man) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_man>());
} else if (tag_ == mfer::tag::mwf_ivl) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_ivl>());
} else if (tag_ == mfer::tag::mwf_sen) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_sen>());
} else if (tag_ == mfer::tag::mwf_wfm) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_wfm>());
} else if (tag_ == mfer::tag::mwf_pre) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_pre>());
} else if (tag_ == mfer::tag::mwf_off) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_off>());
} else if (tag_ == mfer::tag::mwf_nul) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_nul>());
} else if (tag_ == mfer::tag::mwf_pnt) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_pnt>());
} else if (tag_ == mfer::tag::mwf_nte) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_nte>());
} else if (tag_ == mfer::tag::mwf_txc) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_txc>());
} else if (tag_ == mfer::tag::mwf_flt) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_flt>());
} else if (tag_ == mfer::tag::mwf_skw) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_skw>());
} else if (tag_ == mfer::tag::mwf_mss) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_mss>());
} else if (tag_ == mfer::tag::mwf_pnm) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_pnm>());
} else if (tag_ == mfer::tag::mwf_pid) {
return memory_manager::instance().add(new mfer::t_value<mfer::tag::mwf_pid>());
}
return nullptr;
}
ngắn gọn nêu,
mfer :: tag là liệt kê, được định nghĩa như
enum tag {};
trong namespace mfer.mfer :: i_value là lớp trừu tượng.
class i_value {};
mfer :: t_value là lớp templated như,
template <mfer::tag tag_type> class t_value : public i_value {};
Tại thời điểm này, tôi không biết làm thế nào để đơn giản hóa this make_empty_value()
.
Lý tưởng nhất, tôi muốn làm cho nó như thế này:
mfer::i_value* make_empty_value(mfer::tag tag_)
{
return memory_manager::instance().add(new mfer::t_value<tag_>());
}
Nhưng tôi biết rằng nó là mẫu, vì vậy ở trên người ta không có ý nghĩa.
Có ý tưởng nào đơn giản hóa mã này không? (Một số tính năng C++ hiện đại, thư viện Boost, v.v.)
Xin đừng gửi mã của bạn như một hình ảnh. Đăng nó dưới dạng văn bản trong câu trả lời. – milleniumbug
Bạn có thể thay đổi 'if' thành' switch/case' nếu 'mfer :: tag :: mwf_ *' là các hằng số. Điều này có thể tăng cường khả năng đọc. – ForceBru
Bạn có thể chia sẻ định nghĩa của lớp 't_value' không? Ít nhất là các phần liên quan trong đó 'tag_type' ảnh hưởng đến định nghĩa của lớp này. Nó hoàn toàn có thể, dựa trên những gì bạn đang làm, rằng 't_value' không phải là một lớp mẫu nào cả. tag_type có thể được chuyển vào hàm tạo. – selbie