c++ - 非成员(member)转换,不同类型同成员(member)

标签 c++ c++11

我有两个我无法修改的类,它们都具有完全相同的成员:

class Pose1 {
    public:
    double x,y;
};
class Pose2 {
   public:
   double x,y;
};

一部分代码使用 Pose1,另一部分使用 Pose2。有没有办法将它们相互隐式转换?现在我必须一直写

Pose1 p1(0.5, 0.5);
Pose2 p2(p1.x,p2.y);

我知道我可以编写一个只执行一次的转换函数。但是我有很多不同的类型和很多参数。

有什么办法可以做类似的事情:

Pose2 p2  = static_cast<Pose2>(p1);

我无法使用成员函数,因为我无法更改此代码。

谢谢!

最佳答案

试试这个:

template <class Dest, class Src>
Dest pose_cast(const Src &src)
{
    return Dest(src.x, src.y) ;
}

用法:

Pose1 p1 ;
Pose2 p2 = pose_cast<Pose2, Pose1>(p1)

适用于两种转化。

关于c++ - 非成员(member)转换,不同类型同成员(member),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399069/

相关文章:

c++ - 智能感知 : expression must have integral or enum type

c++ - Win32 线程生产者更新消费者线程

C++11 使用指针修改 initializer_list 中的元素导致 SIGSEGV,为什么?

char 数组上的 C++ 内存模型和竞争条件

c++ - 在没有宏的情况下推断类型同时省略移动/复制

c++ - 如何在静止图像opencv c++中执行canny edge后识别汽车

count_if 算法中的 C++ 编译器错误

c++ - 有没有办法通过模板参数自动解析重载方法?

c++ - 编译错误 : `‘error_category’ does not name a type` with g++ 6. 3.0

c++ - 类型删除和可变参数模板化成员函数