Sorunun oldukça yaygın olduğunu düşünüyorum. Bazı giriş dizeniz var ve dizenin içeriğine bağlı olarak bir işlevi çağırmanız gerekiyor. Dizeler için bir anahtar() gibi bir şey. Komut satırı seçeneklerini düşünün.En şık kod dağıtıcıyı arıyor
using std::string;
void Myclass::dispatch(string cmd, string args) {
if (cmd == "foo")
cmd_foo(args);
else if (cmd == "bar")
cmd_bar(args);
else if ...
...
else
cmd_default(args);
}
void Myclass::cmd_foo(string args) {
...
}
void Myclass::cmd_bar(string args) {
...
}
ve başlık
class Myclass {
void cmd_bar(string args);
void cmd_foo(string args);
}
Yani ben her foo ve çubuk dört (4!) Kez tekrarlamak:
Şu anda kullanıyorum. Fonksiyon işaretçisini ve dizeleri önce statik bir diziye besleyebileceğimi ve bir döngü içinde gönderimi yapabildiğimi biliyorum. Ancak, bir şekilde işlevi tanımlamak ve aynı zamanda diziyi otomatik olarak güncellemek mümkün kılan bazı makro hileler (veya POV'ye bağlı önişlemci kötüye kullanımı) var mı? Bu yüzden sadece iki kez mi yazmalıyım, ya da satır içi kullanılırsa bir kez yazmalı mıyım?
C veya C++ 'da bir çözüm arıyorum. Böyle Command pattern
Something aradığınız gibi
Bu soru defalarca sorulmuştur ve bana göre burada cevaplandırılmıştır http://stackoverflow.com/questions/659581/replace-giant-switch-statement-with-what –
Ayrıca, bir çeşit kayıt şeması da istiyor Sözlüğü sürdürme çabasını azaltmak. – djna
O, ama onu tatmin edecek bir şey olduğunu düşünmüyorum. Makrolarla kaba ve çirkin bir şey yapabilirdiniz, ama değerinden daha fazla sorun. –