C++11 在处理嵌套容器时,检查同一容器中是否包含两种不同的类型

C++11 在处理嵌套容器时,检查同一容器中是否包含两种不同的类型,c++11,templates,types,C++11,Templates,Types,我尝试做一些类型转换来将不同的C++库连接在一起,每个库都有不同类的实现,比如点类,在这里,LabalyA将具有类PooTa,而LabyRB将具有PoPTB。为了将数据从一个容器复制到另一个容器,我发现自己必须编写大量繁琐的函数来处理每种类型的不同容器以及嵌套容器。我能够找到并修改一些代码,使我能够轻松地进行基本类型转换,如下所示: template<typename from, typename to> struct type_to_type_converter { fro

我尝试做一些类型转换来将不同的C++库连接在一起,每个库都有不同类的实现,比如点类,在这里,LabalyA将具有类PooTa,而LabyRB将具有PoPTB。为了将数据从一个容器复制到另一个容器,我发现自己必须编写大量繁琐的函数来处理每种类型的不同容器以及嵌套容器。我能够找到并修改一些代码,使我能够轻松地进行基本类型转换,如下所示:

template<typename from, typename to>
struct type_to_type_converter
{
    from to_convert;
    operator to();
};

template<typename from>
struct AnyTypes
{
    from to_convert;
    template<typename to, typename C = type_to_type_converter<from, to>>
    operator to()
    {
        C c = C{std::move(to_convert)};
        return c;
    }
};

template<typename from>
inline AnyTypes<from> from_type(from f)
{
    return AnyTypes<from>{std::move(f)};
}
template<>
type_to_type_converter<PointA, PointB>::operator PointB()
{
    return PointB(to_convert.x(), to_convert.y()); //NOTE: to_convert is of type PointA
}

template<>
type_to_type_converter<PointB, PointA>::operator PointA()
{
    return PointA(to_convert.x, to_convert.y); //NOTE: to_convert is of type PointB
}
我的问题是,为了处理从std::vector到std::vector的转换,我必须为这些新类型定义一对新的运算符函数,如下所示:

template<>
type_to_type_converter<std::vector<PointA>, std::vector<PointB>>::operator std::vector<PointB>()
{
    std::vector<PointB> v;
    for (auto p : to_convert)
    {
        v.push_back(from_type(p)); //NOTE: Assumes previous definition of from_type() for PointA -> PointB
    }
    return v;
}
模板
类型到类型转换器::运算符std::向量()
{
std::向量v;
用于(自动p:to_转换)
{
v、 向后推(from_type(p));//注意:假设前面定义了PointA->PointB的from_type()
}
返回v;
}
用一个匹配的PointB->PointA函数来处理反向转换。然后我必须对std::vectorstd::vectorstd::vectorstd::vectorstd::vector和任何其他容器组合重复此操作。我对模板的知识实际上非常贫乏,我只是通过从其他SO帖子中窃取代码并拼凑在一起才做到这一点。所以我的问题是:通过将AnyTypes struct操作符更改为()可以自动处理不同的容器吗基于一些编译时类型检查,以确定容器是否递归相同,这样每个嵌套容器都会迭代/剥离,直到到达基类型,并且可以调用该对的from_type函数?到目前为止,我的要求仅要求转换句柄与嵌套容器匹配:

std::vector<std::vector<PointA>> <-> std::vector<std::vector<PointB>> 
std::vector std::vector

std::vector std::vector
而不是混合转换,例如:

std::vector<std::vector<PointA>> <-> std::vector<std::queue<PointB>>
std::vector std::vector
在这种情况下,更容易找到解决方案

在我写这个问题的时候,我想到的一些事情包括修改type-to-type-converter结构以包含容器类型的typename,为AnyTypes结构提供可变模板,允许在检测到容器类型模板而不是“点”(或任何其他类)类型时专门化实现以使用迭代器

我发现了一些东西,可以检查两个不同类型的容器是否相同,但在运行一些测试后,这无法处理嵌套容器,只能查看最外层的模板。 我提到这一点的原因是,我希望确保这些类型转换不会被客户机代码误用,并且针对只处理匹配的容器嵌套的解决方案进行了一些类型检查,这样会导致编译时错误,并且不难跟踪运行时错误。该解决方案的另一个限制是,我目前使用的是C++11

现在,如果有一个C++代码FU的人看到这个帖子,我的最终目标是有能力使用赋值运算符做隐式转换,而不是显式调用来自NoHyman JSON库()中的“类型”,但我并不贪婪,只是充满希望。对此问题的任何帮助都将不胜感激

std::vector<std::queue<PointA>> <-> std::vector<std::queue<PointB>> 
std::vector<std::vector<PointA>> <-> std::vector<std::queue<PointB>>