У меня проблема с приведением дочернего класса к функциям, которые получают родительский класс. Я думаю, что это похожая проблема, как здесь C ++ приведение к производному классу . Я пытаюсь реализовать решение с помощью этого поста, но я не нахожу никаких успехов.
сообщение об ошибке
vec_template clang++ -std=c++11 -Wconversion *.cpp && ./a.out
main.cpp:8:18: error: dynamic_cast from rvalue to reference type 'vec2<float> &'
vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
^~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:33:2: note: in instantiation of function template specialization 'show_data<float>'
requested here
show_data(a);
^
main.cpp:8:18: error: 'vec<float> *' is not a class
vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
^ ~~
2 errors generated.
код
#include "vec2.cpp"
#include <iostream>
#include <cstdio>
template <class T>
void show_data(vec<T> &v) {
vec2<T> &temp = dynamic_cast<vec2<T>&>(&v);
std::cout << "v.x(): " << temp.x() << std::endl;
std::cout << "v.y(): " << temp.y() << std::endl;
}
int main() {
vec2<float> a;
std::cout << a << std::endl;
show_data(a);
a.x(2);
show_data(a);
printf("instance vec2 float: %i\n", vec2<float>::get_instance());
return (0);
}
где vec2
template <class T>
class vec2 : public vec<T> {
//
};