如何从c++;? 我在C++中有一个作业,在同一个向量中为多数据类型做一个向量>代码,我在那里需要返回不同的数据类型,并且不能改变主。< /P>

如何从c++;? 我在C++中有一个作业,在同一个向量中为多数据类型做一个向量>代码,我在那里需要返回不同的数据类型,并且不能改变主。< /P>,c++,operator-overloading,return-type,C++,Operator Overloading,Return Type,家庭作业要求使主要内容有效: int main() { Vector v; v.add(5); v.add(5.5f); v.add("this"); for (int i = 0; i != v.size(); ++i) { // this code print 5 5.5 this std::cout << v.get(i) << "\t"; } std::

家庭作业要求使主要内容有效:

int main()
{
    Vector v;
    v.add(5);
    v.add(5.5f);
    v.add("this");
    for (int i = 0; i != v.size(); ++i) { // this code print 5 5.5 this
        std::cout << v.get(i) << "\t";
    }
    std::cout << "Displaying an object of type Vector in different way:\n";
    Integer x;
    x = v.get(0);
    std::cout << x << "\t"; // it prints 5
    Float y;
    y = v.get(1);
    std::cout << y << "\t"; // it prints 5.5
    String z;
    z = v.get(2);
    std::cout << z << "\t"; // it prints this
}
我在互联网上搜索,仍然没有找到我想要的,最后我试图使节点模板
但是,由于get函数位于向量上,main没有发送类型,因此无法解决问题。

如果我理解正确,您要查找的是一个异构容器

您需要创建一个包装器,在容器中透明地处理不同的类型。对于基础类型,根据需要,您有几个选项

如果您预先知道编译类型需要支持的类型列表,那么可以使用std::variant

如果需要支持的类型在编译时是无界的,则可以使用

最后,您可以为支持的类型创建公共接口并实现包装器。容器将存储对象的智能指针

更新

    基于C++版本的设计决策建议
  • 删除了对std::vector的引用

您可以使用转换运算符返回包装器,例如:

struct data
{
    int int_ = 0;
    float float_ = 0;
    string string_;

    operator int () const { return int_; }
    operator float () const { return float_; }
    operator std::string () const { return string_; }
};


const Node* get_node(int n) const
{
    Node* p = head;
    int i;
    for (i = 0; (i < n) && p->next; i++)
        p = p->next;
    return p;
}

data get(int n) const
{
    auto* node = get_node(n);
    if (node == nullptr) throw std::out_of_range{};
    return node->data;
}
struct数据
{
int=0;
浮点数=0;
字符串字符串u0;
运算符int()常量{return int_;}
运算符float()常量{return float}
运算符std::string()常量{返回字符串}
};
常量节点*获取节点(int n)常量
{
节点*p=头部;
int i;
对于(i=0;(inext;i++)
p=p->next;
返回p;
}
数据获取(整数n)常数
{
自动*节点=获取_节点(n);
如果(node==nullptr)抛出std::out_of_range{};
返回节点->数据;
}

第一个问题:你确定你是在编码C++吗?什么是整数,什么是浮点???。。。什么是向量???向量的类型是什么???我不同意根据标准的可用版本在继承和任何变体之间做出决定。@maximum_prime_是_463035818这是公平的,我是在一个练习的上下文中列出该选项的,而不是生产代码。让我重新措辞it@ThomasSablik您可能是对的,但无论问题中的容器是什么,上述三个选项仍然有效,都有合适的方法来处理多态性不同的类型,这在我看来是问题的核心question@ThomasSablik更新
int* int_;
float* float_;
string* string_;
Node* next;
string type;
Node(string type_)
struct data
{
    int int_ = 0;
    float float_ = 0;
    string string_;

    operator int () const { return int_; }
    operator float () const { return float_; }
    operator std::string () const { return string_; }
};


const Node* get_node(int n) const
{
    Node* p = head;
    int i;
    for (i = 0; (i < n) && p->next; i++)
        p = p->next;
    return p;
}

data get(int n) const
{
    auto* node = get_node(n);
    if (node == nullptr) throw std::out_of_range{};
    return node->data;
}