Tôi có một mã phân tích một số tệp mẫu và khi tìm thấy một trình giữ chỗ, nó sẽ thay thế nó bằng một giá trị. Một cái gì đó như:Thay thế tuyên bố chuyển đổi khổng lồ bằng cái gì?
<html>
<head>
<title>%title%</title>
</head>
<body bgcolor="%color%">
...etc.
Trong mã, phân tích cú pháp tìm thấy những, gọi chức năng này:
string getContent(const string& name)
{
if (name == "title")
return page->getTitle();
else if (name == "color")
return getBodyColor();
...etc.
}
và sau đó thay thế giữ chỗ ban đầu với giá trị trả về.
Trong trường hợp thực, đây không phải là trang web giả và có nhiều (50+) trình giữ chỗ khác nhau có thể xảy ra.
Mã của tôi là C++, nhưng tôi đoán vấn đề này tồn tại với bất kỳ ngôn ngữ nào. Đó là nhiều hơn về các thuật toán và thiết kế OO tôi đoán. Chỉ có điều quan trọng là điều này phải được biên dịch, ngay cả khi tôi muốn tôi không thể có bất kỳ mã động/eval'd.
Tôi mặc dù về việc triển khai mẫu Chuỗi trách nhiệm, nhưng dường như nó không cải thiện tình hình nhiều.
CẬP NHẬT: và tôi cũng lo ngại về this comment trong một chuỗi khác. Tôi có nên quan tâm đến nó?
+1 Để làm rõ, trong C++, chúng được gọi là std :: map. – Eclipse
Đặc biệt tốt nếu từ điển của bạn có thể sử dụng tra cứu O (1) như băm. –
Câu trả lời hay. Một chút về phía nạc, nhưng chắc chắn là một cách tốt để đi. :) –