我正在實現類似於類型化遺傳編程的東西,並且對於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