在变量模板中使用变量函数 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);
}
我想实现一个每个节点都有数据的图。但是我还不知道我会得到什么样的数据。因此我认为我应该使用 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);
}