ile nasıl kaydedilmesi Sanal üye işlevlerinin aksine, her bir sınıf sınıfı türetmede uygulanan bir işlevin, temel sınıf tarafından daha sonra aramak üzere kaydedilebileceği bir çözüme ihtiyacım var. (Sadece en türetilen uygulama değil)Türetilmiş bir sınıf üyesi işlev göstergesinin bir taban sınıfı
Bunu yapmak için, türetilmiş sınıf kurucusu sırasında olduğu gibi temel sınıfla işlevlerini kaydetmek için türetilmiş sınıflar için bir mekanizma sağlamayı düşünmekteydim.
Üye işlev göstergesi bağımsız değişkeniyle sorun yaşıyorum. Derived'in Base'den türetildiğini düşünüyordum, this
işaretçisinin otomatik olarak dökülmesi gerekiyor.
Bu, çalıştığım şeye yakın yapılabiliyor veya void *
ve static_cast
statik üye işlevlerini kullanmam gerekiyor mu?
class Base
{
protected:
typedef void (Base::*PrepFn)(int n);
void registerPrepFn(PrepFn fn) {};
}
class Derived : public Base
{
Derived() {
registerPrepFn(&Derived::derivedPrepFn);
};
void derivedPrepFn(int n) {};
}
Derleyici hatası:
error: no matching function for call to 'Derived::registerPrepFn(void (Derived::*)(int))'
note: candidates are: 'void Base::registerPrepFn(void (Base::*)(int))'
Tam olarak ne yapmak istediğinizden emin değilim. Ancak bu şekilde kesinlikle mümkün değil; "Türetilmiş" de tanımlanan bir üye işlevi bir "Base :: *" ile işaret edilemez. Belki de en üst düzey hedefi açıklarsanız, birileri daha iyi bir çözüm önerebilir. –
FTR, 'void *' ve 'static_cast', üye işlevi için bir işaretçi bir işaretçi olmadığı için işe yaramaz (evet, korkunç adı verilir). –
Statik döküm ile ilgili olarak, statik üye fonksiyonlarını uygulayabileceğimi düşünüyordum ve bu işaretçiyi açık bir şekilde iletmek için – NoahR