仅在C ++上可以解决此问题。我有一个随时随地定义的线程链。因此,假设数字0的线程正在等待线程1、2和3返回的结果。
void thread0()
{
vector<int> numbers_of_children_lists;
vector<???> results_of_previos_calc;
for(auto i : numbers_of_children_lists)
{
results_of_previos_calc.push_back(GetResult(List[i]));
}
/*some operation on this given parameters*/
/*what a type*/ result = ...;
struct Node *a;
a->result = result;
List[some_num].push(a); /*and so on*/
}
List[i]
包含以前的线程在结束工作时推送的节点struct Node
{
/*what a type?*/ result;
}
因此,我希望thread0可以在具有通用类型的自己容器中采用任何参数。确切地说,thread1返回整数类型,thread2返回字符串类型,thread3返回布尔值。
参数的0线程容器应能够与任何类型的参数一起使用。可能吗?
附言我不知道在编译程序时哪种类型会返回线程,因为我将向该函数分配一些结构对象,并且我将调用可能返回任何内容的重写运算符
最佳答案
附言我不知道在编译程序时哪种类型会返回线程,因为我将向该函数分配一些结构对象,并且我将调用可能返回任何内容的重写运算符
如果您确实不知道是什么类型,那么除了将指针存储在void*
中之外,您无能为力。但是您甚至无法正确删除它。
在C ++中,有几种方法可以处理一些未知类型。
1)如果可以是int
,double
或std::string
三种类型,则可以使用std::variant
来标识它是哪种类型。或者,将具有这些类型的结构作为成员,并创建一个枚举以标识其类型。
2)为所有返回类型创建一个共享的抽象接口,并通过指针返回它们。这是面向对象的样式。
与Python不同的是,在C ++中,仅知道其地址或某物就无法确定返回的类型-如果返回了变量,但无权访问其定义,那么您将发现很难编译代码,您需要访问其类定义以使用它(除了传递指针/引用以外,以任何有意义的方式)。这是因为在Python中存储了额外的信息,这些信息允许代码识别类型-在C ++中,情况并非如此,您必须在需要时自行修改识别过程。