我想实现一个图表,其中每个节点都有数据。但是我还不知道我会得到什么样的数据。因此我认为我应该使用variadics模板来实现它。我的班级Node
必须像这样做一些想法:
//in Node.hpp
template<typename Identifier , typename... NodeData>
class Node {
private:
nodeData... data;
//std::tuple<nodeData...> data;
Identifier ID;
public:
Node(Identifier nodeID, NodeData... data){
this->ID = nodeID;
this->data = data;
}
void set_data(nodeData... data){
this->data = data;
}
nodeData... get_data(){
//std::tuple<nodeData...> get_data() {
return this->data;
}
但是你可能知道,它并不像那样,但我不知道如何做对。 NodeData
几乎可以是一切,例如一个字符串和两个int。
此外,此类在其他地方(在类Graph
中)使用,其函数看起来像
//in Graph.hpp
void update_data(Identifier ID, nodeData... data){
get_Node(ID).Node<Identifier, nodeData...>::set_data(data)
// get_Node(ID).Node<Identifier, nodeData...>::set_data(data...)
}
这种语法是否正确(假设set_data
有效)?
提前感谢您提供任何帮助/线索,
Ezor
PS:抱歉我的英文不好
答案 0 :(得分:0)
从这里开始。然后考虑分离出构造函数参数的类型和set_data调用:
//in Node.hpp
#include <tuple>
template<typename Identifier , typename... NodeData>
class Node {
private:
Identifier ID;
std::tuple<NodeData...> data;
public:
Node(Identifier nodeID, NodeData... data)
: ID(nodeID)
, data { data ... }
{
}
void set_data(NodeData... data){
this->data = std::tie(data...);
}
auto get_data() const {
return this->data;
}
};
Node<int, int, float>& get_Node(int id)
{
// whatever you need to do here
}
//in Graph.hpp
template<class Identifier, class...nodeData>
void update_data(Identifier ID, nodeData... data)
{
get_Node(ID).set_data(data...);
}
int main()
{
Node<int, int, float> x = { 10, 1, 2.1 };
update_data(10, 1, 2.1);
}