如何从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;
}