我正在实现类似于类型化遗传编程的东西,并且对于C++类型已经变得有点卡住了。如何转换为变量类型 - 模拟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;
...
}
注意我有一个模板FunctionalNode
,其存储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 + +缺乏类型变量的支持,或完全不同的方法来解决这个问题?
够公平的,告诉我在哪里可以改善和更精确。 – zenna 2012-08-09 19:48:19
例如您可以提供一个最小编译代码示例,显示您不明白的具体错误或问题。 – TemplateRex 2012-08-09 21:52:57