Задача 1: У меня есть следующий код:C++ полиморфизм и VARIADIC Шаблоны
template<typename T, typename S>
class Base {
virtual void fun(const T& arg1, const S& arg2) = 0;
private:
T v1;
S v2;
};
class Derived1 : public Base<int, double> {
public:
virtual void fun(int &arg1, double &arg2) override {
// do some special stuff
}
};
class Derived2 : public Base<float, int> {
public:
virtual void fun(float &arg1, int &arg2) override {
// do some special stuff
}
};
мне нужно собрать все ссылки на эти объекты (Derived1 & Derived2) в одном векторе к петле над ними и вызывать весело на каждом объекте.
Задача 2: Такая же проблема, но база имеет VARIADIC параметры шаблона Теперь
template<typename T, typename ... S>
class Base {
virtual void fun(const T& arg1) = 0;
private:
T v1;
std::tuple<std::vector<S>...> v2;
};
class Derived1 : public Base<int, double, int, int> {
public:
virtual void fun(int &arg1) override {
// do some special stuff
}
};
class Derived2 : public Base<float, int, double, double> {
public:
virtual void fun(float &arg1) override {
// do some special stuff
}
};
Есть удобный способ собрать все ссылки на объекты Derived1 и Derived2 в одном векторе?
'станд :: VECTOR' может содержать только элементы одного и того же типа. Следовательно, 'std :: vector' будет неуместным в вашем случае. – 101010
«Мне нужно собрать» - нет, вам это не нужно. Вы можете * думать *, что вам это нужно, но ваша фактическая проблема, о которой вы нам не говорили, скорее всего, имеет совершенно другое и гораздо лучшее решение. –
'abstract' - это не ключевое слово в C++. На каком языке вы пишете? Во-вторых, проблема 1 и проблема 2 почти не связаны, и вы должны задать один вопрос за раз. Это не интерфейс «ask QUESTIONS». И 'std :: tuple>' также не является допустимым. C++, '...' там нельзя использовать. «Эти объекты» также неясны, я понятия не имею, что означает «те». –
Yakk