【发布时间】:2021-06-14 17:28:46
【问题描述】:
在我的头文件中,我有两种不同类型的对象 ImageFrame 和 `PointCloudFrame.然后用 std::variant 定义这些
struct ImageFrame{
};
struct PointCloudFrame{
};
using SensorFrame = std::variant<std::shared_ptr<ImageFrame>,
std::shared_ptr<PointCloudFrame>>;
我需要为这两个对象编写一个模板方法,所以我在头文件中这样做了:
template<class T>
std::string getFrameBin(const T& frame);
在cpp文件中
template <class ImageFrame>
std::string getFrameBin(const ImageFrame& image_frame)
{
std::string x;
return x;
}
template <class PointCloudFrame>
std::string getFrameBin(const PointCloudFrame& cloud_frame)
{
std::string x;
return x;
}
但是,我收到与以下相关的错误:
error: redefinition of 'template<class PointCloudFrame> std::string
我做错了什么?有没有更优雅的方法来利用SensorFrame 对象
【问题讨论】:
-
模板代码需要定义在头文件中,而不是
cpp文件中。 -
std::variant在 C++17 中添加。 C++11 标签没有意义。