如何将任何对象传递给函数?

问题描述 投票:0回答:2

我正在尝试将任何对象传递给函数(以检查其类型),我有这样的东西:

void Write(Object obj)
{
    cout << typeid(obj).name() << endl;
}

但是我收到错误“Write”未在此范围内声明。 我假设没有“对象”类型

c++ object types
2个回答
1
投票

C++ 不是 Java。不存在一个

Object
类是所有其他类都继承自的。您可以使用模板,但您仍然不会在 C++ 中进行相同类型的运行时自省。

template <class Object>
void Write(Object obj) {
    std::cout << ... << std::endl;
}

如评论中所述,您可能希望通过常量引用传递参数,而不是值,这将涉及副本。

template <class Object>
void Write(const Object& obj) {
    std::cout << ... << std::endl;
}

0
投票

除了其他答案之外,在 中,您可以使用

auto
让编译器确定类型。这意味着如果您传递
int
,则
auto
会产生
int
类型。就语法而言,这是最接近“any”类型的。

现场演示

void Write(auto obj){
    std::cout << typeid(obj).name() << std::endl;
}

int main() {
    Write(int{});
}

输出:

int

阅读这里为什么

using namespace std;
被认为是不好的做法。

© www.soinside.com 2019 - 2024. All rights reserved.