Возможно, вы захотите ознакомиться с Loki TypeLists, если вам действительно нужно иметь возможность отслеживать родословную и перечислить типы. Я не уверен, что то, о чем вы просите, действительно возможно без кучи работы. Убедитесь, что вы здесь не слишком сложны.
В немного отличающемся примечании, если вы собираетесь использовать MI таким образом (то есть страшный бриллиант), тогда вы должны быть очень ясными о том, какой виртуальный член вы хотите. Я не думаю о хорошем случае, когда вы хотите выбрать семантику B::fn()
за C::fn()
без явного принятия решения при написании D
. Вероятно, вы выбрали один из них (или даже оба), исходя из того, что делает индивидуальный метод. После того, как вы приняли решение, требование состоит в том, что унаследованные изменения не изменяют ожидания или семантический интерфейс.
Если вы действительно беспокоитесь об обмене в новом классе, скажем E
вместо сказать B
где E
не происходит от B
, но предлагает тот же интерфейс, то вы действительно должны использовать шаблон подход, хотя я не уверен, почему в там static_cast<>
...
struct A {
virtual ~A() {}
virtual void f() = 0;
};
struct B: A {
virtual void f() { std::cout << "B::f()" << std::endl; }
};
struct C: A {
virtual void f() { std::cout << "C::f()" << std::endl; }
};
template <typename Base1, typename Base2>
struct D: Base1, Base2 {
void g() { Base1::f(); Base2::f(); }
};
int main() {
D<B,C> d1;
D<C,B> d2;
d1.g();
d2.g();
return 0;
}
// Outputs:
// B::f()
// C::f()
// C::f()
// B::f()
работает отлично и, кажется, немного легче смотреть.
Я не мог найти вопрос, который отвечает на эту конкретную проблему. ты можешь? – shoosh
Это не потому, что речь идет о множественном наследовании, которое можно догадаться, что оно уже было рассмотрено в других сообщениях. Он спросил: «Я пытаюсь сделать так, чтобы D как-то перечислил все экземпляры fn(), которые он имеет в своей родословной. Возможно ли это каким-то другим способом, что виртуальные функции? ».Хотя я думаю, что это был несколько наивный вопрос, ни один из вопросов, которые вы здесь связали, не говорит об этом. Я думаю, он был довольно конкретным и уникальным в своих опросах. -1. –