在variadics模板类中使用variadics函数

时间:2017-10-25 14:12:01

标签: c++ variadic-templates variadic-functions variadic

我想实现一个图表,其中每个节点都有数据。但是我还不知道我会得到什么样的数据。因此我认为我应该使用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:抱歉我的英文不好

1 个答案:

答案 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);

}