Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板向量操作重载_C++_Templates_Vector - Fatal编程技术网

C++ C++;模板向量操作重载

C++ C++;模板向量操作重载,c++,templates,vector,C++,Templates,Vector,我有一个棘手的问题 我想创建一个typedef std::vector BasicVector的模板 这是因为我想重载一个适用于所有基本向量的方法 sf::Packet& operator <<(sf::Packet& packet, BasicVector& p); sf::Packet&operator我要找的是这样的东西。这很微妙但很简单 这有点凌乱,如果我们能键入一个std::vector就好了,但这没什么大不了的 // Packs a basic

我有一个棘手的问题

我想创建一个
typedef std::vector BasicVector的模板

这是因为我想重载一个适用于所有基本向量的方法

sf::Packet& operator <<(sf::Packet& packet, BasicVector& p);

sf::Packet&operator我要找的是这样的东西。这很微妙但很简单

这有点凌乱,如果我们能键入一个
std::vector
就好了,但这没什么大不了的

// Packs a basic const std::vector into a packet.
template<typename T>
sf::Packet& operator <<(sf::Packet& packet, const std::vector<T*>& v)
{
    packet << (uint32_t)v.size();

    for (typename std::vector<T*>::iterator it = v.begin() ; it != v.end(); ++it)
        packet << *it;

    return packet;
}
//将基本常量std::vector打包到数据包中。
模板
sf::数据包和运营商

typedef模板std::vector BasicVector;
你需要:

使用BasicVector=std::vector的模板;
但您仍然不能只将BasicVector传递给函数。它只是短一点。例如,对于std::vector,您将编写BasicVector


而且,是的,使用运算符“typedef template std::vector BasicVector;”可以使用“template using BasicVector=std::vector;”完成您想要的操作,但不确定其目的。谢谢@jhofman0x,请参阅下面我的答案,了解我试图完成的操作。啊!这很接近。我来玩玩,看看能得到什么。谢谢
sf::Packet& operator <<(sf::Packet& packet, std::vector<T*>& p);
// Packs a basic const std::vector into a packet.
template<typename T>
sf::Packet& operator <<(sf::Packet& packet, const std::vector<T*>& v)
{
    packet << (uint32_t)v.size();

    for (typename std::vector<T*>::iterator it = v.begin() ; it != v.end(); ++it)
        packet << *it;

    return packet;
}
typedef template<typename T> std::vector<typename T*> BasicVector;
template<class T> using BasicVector = std::vector<T*>;
template<class T> using BasicVector = std::vector<T*>;

template<typename T>
sf::Packet& operator <<(sf::Packet& packet, const BasicVector<T>& v)
{
    packet << (uint32_t)v.size();

    // Or typename BasicVector<T>::value_type elem
    std::for_each(v.cbegin(), v.cend(), [](T* elem)
        {
            // *it is a pointer elem. Are you sure you need a pointer ?
            packet << *elem;    
        });

    return packet;
}