仅输出重载 c++

Output only overloading c++

本文关键字:c++ 重载 输出      更新时间:2023-10-16

可能的重复项:
按返回类型重载

是否可以仅重载函数的输出。例如,假设我有一个函数,可以通过两种不同的方式返回姿势。6自由度姿势或齐次变换矩阵。所以我有两个功能:

Eigen::Vector6f pose();

Eigen::Matrix4d pose();

可以重载唯一的输出吗?

如果我这样做,那么编译器如何知道要使用哪个函数?

当我这样做时,它可以告诉它:

Eigen::Matrix4d poseHolder = pose();

使用第二个功能?如果没有,有没有办法在不单独命名函数的情况下完成此操作?

不,您通常不能这样做。如果你真的坚持对两个不同的函数使用相同的名称,你可以通过返回一个带有重载转换运算符的代理对象来伪造它:

struct Proxy {
    operator Eigen::Vector6f() const {
        // ...
    }
    operator Eigen::Matrix4d() const {
        // ...
    }
};
Proxy pose() { return Proxy(); }

载函数签名必须不同。对于普通函数,返回类型不是签名的一部分,因此您无法执行所需的操作。对于函数模板,尽管返回类型是签名的一部分,因此您可以重载仅返回类型不同的函数模板。

规则是合乎逻辑的。实际上,对于普通函数,编译器(在一般情况下)不知道要调用哪个函数。对于函数模板,调用方可以自由地显式指定返回类型。

函数重载的关键是函数的参数列表,也称为函数签名

如果两个函数以相同的顺序使用相同数量和类型的参数,他们有相同的签名;变量名称无关紧要。C++使您能够定义两个同名的函数,前提是这些函数具有不同的签名。

这签名可以在参数数和/或参数类型上有所不同。

拿你的样本来说,如果你不想存储pose();的返回值,那么应该调用哪一个?

pose();