gpt4 book ai didi

c++ - 如何转换为变量类型 - 在 C++ 中模拟类型变量

转载 作者:行者123 更新时间:2023-11-30 04:25:53 25 4
gpt4 key购买 nike

我正在实现类似于类型化遗传编程的东西,并且对 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,我认为(但不确定)如果我要存储,我的问题同样适用一个普通的函数指针。

所以问题是,在给定一个指向派生的 FunctionalNodeNode 指针的某个点,我需要将存储的函数应用于某些值。这意味着我需要将基指针转换为派生类,但由于它是模板化的,我不确定如何执行此操作。

我想做类似下面的假 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++ 语言中使用的类型变量。

我有什么想法可以实现这个 seing,因为 C++ 缺乏对类型变量的支持,或者完全不同的方法来解决这个问题?

最佳答案

你应该利用你的多态结构。您可以使用纯虚方法定义 Node,而不是使 applyfunction 成为一个自由函数。

class Node {
protected:
std::string label;
std::string node_type;
public:
virtual ~Node () {}
virtual Node * applyfunction (std::vector<Node *> args) = 0;
};

然后您的推导将完成这项工作。

template
<typename FNC>
class FunctionalNode : public Node {
std::function<FNC> function;
public:
Node * applyfunction (std::vector<Node *> args) {
//...
}
};

关于c++ - 如何转换为变量类型 - 在 C++ 中模拟类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com