[英]how return different types from function in c++?
我在 c++ 中有一个作业,为同一个Vector
中的多种数据类型制作一个向量,我卡在需要返回不同数据类型的地方,我无法更改主。
作业要求使主要有效:
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
}
我尝试了我所知道的,我得到了 3 种方法,但仍然没有解决这个问题,首先我将所有数据指针设为 char*,并创建了一个字符串类型,用于保存数据和 cout,但它停留在返回数据类型上,我无法使用模板,因为我不允许更改主
int get(int n)
{
Node* p = head;
int i;
for (i = 0; (i < n)&&p->next; i++)
p = p->next;
if (i != n)
return NULL;
if (p->type != "int")
return NULL;
else return *((int*)p->data);
}
我仍然不能仅通过返回类型重载函数,我试图让向量有 3 个指向数据的指针,但我仍然卡住了
int* int_;
float* float_;
string* string_;
Node* next;
string type;
Node(string type_)
我在互联网上搜索,仍然没有找到我想要的,最后我尝试制作节点模板,但是由于 get function 在矢量上,并且主要没有发送没有解决问题的类型。
您可以使用转换运算符返回包装器,例如:
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;
}
如果我理解正确,您正在寻找的是一个异构容器。
您需要创建一个包装器,在容器内透明地处理不同类型。 对于您的基础类型,您有多种选择,具体取决于您的需要。
如果您预先知道需要在编译类型时支持的类型列表,则可以使用 std::variant https://en.cppreference.com/w/cpp/utility/variant 。
如果您需要支持的类型在编译时不受限制,您可以使用https://en.cppreference.com/w/cpp/utility/any
最后,您可以创建一个通用接口并为您支持的类型实现一个包装器。 容器将存储对象的智能指针。
更新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.