Я не уверен, как это объяснить, потому что я действительно не знаю правильных терминов, но вот пример:
template <typename T>
struct PointerWrapper {
T *ptr;
};
struct Base {};
struct Derived : public Base {};
void test(PointerWrapper<Base>) {}
int main() {
PointerWrapper<Derived> p;
test(p);
return 0;
}
Так как "Derived" является производным от "Base" иСтруктура "PointerWrapper" работает только с указателями на тип, указанный в шаблоне, в этом нет ничего плохого.Но компилятор жалуется:
asdfg.cpp:15:11: error: could not convert ‘p’ from ‘PointerWrapper<Derived>’ to ‘PointerWrapper<Base>’
Я даже пытался test(reinterpret_cast<PointerWrapper<Base>>(p))
, но он говорит:
asdfg.cpp:15:51: error: invalid cast from type ‘PointerWrapper<Derived>’ to type ‘PointerWrapper<Base>’
Так что мне делать?