我正在实现类似于类型化遗传编程的东西,并且在 C++ 类型方面有点卡住了。
我有一个节点网络,节点有不同的类型,例如一些是功能节点,而另一些只是数据。为了处理此类节点的集合,除了使用多态性来存储基类指针的集合之外,我别无选择。
class Node {
private:
std::string label;
std::string node_type;
};
template
<typename FNC>
class FunctionalNode : public Node {
std::function<FNC> function;
};
class Network {
std::vector<Node*> nodes;
...
}
注意我有一个 templated FunctionalNode
,它存储 a std::function
,我认为(但不确定)如果我要存储一个普通的函数指针,我的问题同样适用。
所以问题是,在某些时候给定一个Node
指向 dervied的指针FunctionalNode
,我需要将存储的函数应用于某些值。这意味着我需要将基指针转换为派生类,但由于它是模板化的,我不确定如何执行此操作。
我想做类似下面的假 C++ 代码,它需要类型变量之类的东西:
Node * applyfunction(Node * functional_node, std::vector<Node*> arguments) {
typevariable function_type = convert_node_type_to_typevariable(functional_node.node_type)
functional_node_derived * = static_cast<function_type>(functional_node);
....
}
节点node_type
是我用来包含节点类型信息的某种结构,例如它的函数形式的类型,并将其convert_node_type_to_typevariable
转换为我可以在这个假设的 C++ 语言中使用的类型变量。
由于 C++ 缺乏对类型变量的支持,或者完全不同的解决问题的方法,我有什么想法可以实现这种设置吗?