I am trying to pass an any object to a function (to check its type), and I have something like this:
void Write(Object obj)
{
cout << typeid(obj).name() << endl;
}
But i got an error 'Write' was not declared in this scope. I assume that there is no an 'Object' type
CodePudding user response:
C is not Java. There is not an Object class that every other class inherits from. You can use a template, but you still won't have the same kind of runtime introspection in C .
template <class Object>
void Write(Object obj) {
std::cout << ... << std::endl;
}
As noted in a comment, you probably want to pass the argument by const reference, rather than value.
template <class Object>
void Write(const Object& obj) {
std::cout << ... << std::endl;
}
CodePudding user response:
In addition to the other answer, in c 20 you can use auto to let the compiler figure out the type. This means if you pass an int, auto results in the int type. This is the closest, in terms of syntax, you will get to having an "any" type.
void Write(auto obj){
std::cout << typeid(obj).name() << std::endl;
}
int main() {
Write(int{});
}
output:
int
Read here why using namespace std; is considered bad practice.
