Мне интересно, есть ли способ, чтобы массив в классе/структуре не имел точного значения, поэтому, когда он унаследован, он может иметь другое значение, чем другие структуры. В этом примере:
struct foo
{
virtual int test[];
};
struct bar : foo
{
int test[3];
};
struct bars : foo
{
int test[5]
};
В этом примере я пытаюсь определить новый массив int, имеющий ключевое слово virtual в классе foo
. Как вы можете видеть, что bar
тест массив размер 3, но в bars
тест массив размер 5. Однако, когда я пытаюсь наследовать foo
к bar
или bars
, он терпит неудачу и дает мне ошибку: invalid base class
.
Изменение: Извините, что мой пост не совсем ясен. Я пытался лучше объяснить массив неизвестного размера, но почему-то оказался чем-то более запутанным. Кроме того, для людей, которые собираются сказать, используйте std::vector
, пожалуйста, перечитайте мои изменения выше
Не уверен, чего вы пытаетесь достичь. Независимо от того, вы можете использовать;
struct foo
{
foo(int* t) : test(t) {}
int* test;
};
struct bar : foo
{
bar() : foo(derived_test) {}
int derived_test[3];
};
Будет гораздо лучше использовать std::vector<int>
.
struct foo
{
foo(size_t size) : test(size) {}
std::vector<int> test;
};
struct bar : foo
{
bar() : foo(3) {}
};
Есть ли обходной путь? Еще лучше, есть ли что-то более эффективное, чем массив, который позволяет создавать новые статические массивы из унаследованного динамического массива?
Используйте std :: vector в базовом классе... и сделайте его защищенным.
virtual int test[];
это не виртуальная функция