Я ленивый, я не хочу писать один и тот же код дважды, так как я могу избежать этого в этом случае?
У меня есть узлы в дереве, некоторые из них имеют член _key, подобный этому:
struct node_base {
virtual void foo()=0;
virtual ~node_base() {}
}
template<typename Key>
struct node_key: public node_base {
node_key(Key k): _key(k) {}
virtual ~node_key() {}
protected:
Key _key;
};
Теперь у меня есть два типа дочерних узлов, один из которых наследуется от node_key, а другой - только от node_base
struct no_key {};
template<typename Key, typename Data>
struct child: public node_key<Key> {
…
void foo() {
//do something with _data
}
protected:
Data _data;
}
template<typename Data>
struct child<no_key,Data>: public node_base {
…
void foo() {
//do something with _data
}
protected:
Data _data;
}
Однако, как вы видите, я пишу foo дважды, и это одинаково в обоих случаях. Могу ли я сделать что-нибудь для повторного использования?
Преимущество node_key в том, что у меня может быть указатель
node_key<int> *p=new child<int,int>
…
p->foo();
и произойдет сбой во время компиляции, если p = new child , что нормально. У меня также может быть указатель.
node_base *p=get_a_child();
p->foo();
Подробнее о моем дереве здесь:
https://www.facebook.com/profile.php?id=100013861179843