виртуальные методы и шаблонные классы

Я преобладал над проблемой, я думаю очень определенный.

У меня есть 2 класса, B aseclass и D erived класс (от B aseclass). B является шаблонным классом (или шаблон класса) и имеет чистый виртуальный метод virtual void work(const T &dummy) = 0; D erived класс, как предполагается, повторно реализует это, но поскольку D Получен из B, а не D, являющегося другим шаблонным классом, слюной компилятора во мне, что виртуальные функции и шаблоны не работают сразу.

Какие-либо идеи, как выполнить то, что я хочу?

Я благодарен за любые мысли и Идеи, особенно если Вы уже решили ту проблему

этот класс фиксируется иначе, AS, я не могу отредактировать это, не повреждая существующую кодовую базу

template <typename T>
class B {
public:
...
virtual void work(const T &dummy) = 0;
..
};

возьмите интервал* в качестве примера

class D : public B<int*>{
...
virtual void work(const int* &dummy){ /* put work code here */ }
..
};

Править: Компилятор говорит мне, этому void B<T>::work(const T&) [with T = int*] чист виртуальный в D

5
задан Georg Fritzsche 29 March 2010 в 16:42
поделиться

4 ответа

Вы разместили константу не в том месте. Попробуйте

virtual void work(int* const &dummy){ /* put work code here */ }

const int * то же самое, что и int const * , то есть связывает const с int, а не с указателем.

9
ответ дан 13 December 2019 в 22:05
поделиться

Попробуйте:

int* const& dummy
1
ответ дан 13 December 2019 в 22:05
поделиться

Какой компилятор?

g ++ 4.4 не жаловался:

template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(const int* &dummy){ /* put work code here */ }
};

int main(){return 0;}

РЕДАКТИРОВАТЬ: Конечно - ошибка появилась только при фактическом создании экземпляра D, исправлена ​​перемещением ключевого слова const:

template <typename T>
class B {
public:
virtual void work(const T &dummy) = 0;
};
class D : public B<int*>{
virtual void work(int* const &dummy){ /* put work code here */ }
};

int main(){D d;return 0;}
0
ответ дан 13 December 2019 в 22:05
поделиться

У вас есть проблема с константой и ссылкой. Следующие компилируются:

template <typename T>
struct B {
virtual void work(T dummy) = 0;
};

struct D : public B<int*>{
virtual void work( int* dummy){ /* put work code here */ }
};

int main() {
    D d;
    d.work( 0 );
}
0
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: