在变量模板中使用变量函数 class

Using variadics function in variadics template class

我想实现一个每个节点都有数据的图。但是我还不知道我会得到什么样的数据。因此我认为我应该使用 variadics 模板来制作它。我的 class 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 几乎可以是任何东西,例如一个字符串和两个整数。 此外,这个 class 在其他地方使用(在 class 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 有效)?

提前感谢您的任何形式 help/clue,

伊佐尔

PS : 抱歉我的英语不好

从这里开始。然后考虑分离构造函数参数和 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);

}