gpt4 book ai didi

c++ - 如果我们不想要模板/泛型中的任何数据类型怎么办

转载 作者:行者123 更新时间:2023-11-28 02:35:53 24 4
gpt4 key购买 nike

当我们使用来自 STL 的通用数据类型或我们自己实现的通用类时,我们是否可以选择不指定数据类型...???

例子:

如果我正在制作一个图形库....有些使用该库的人可能想在节点中存储一些数据而有些人可能只对节点之间的连接感兴趣....

所以为了提供一个通用库,我们放置了一些数据变量 say

template <class T>
class Graph
{
T data[number_of_nodes]; // This somehow corresponds to data stored in each node
Edge e[number_of_edges];
}

不,如果我根本不需要任何数据变量,我应该怎么做...?

最佳答案

如果你让我将你的普通数组包装在一个类中,你可以对 void 进行显式特化,并且只需支付一个额外的字节:

template<int N, class T>
class array {
T v[N];
const T &operator[](int i) const { return v[i]; }
T &operator[](int i) { return v[i]; }
};

template<int N>
class array<N,void> {
const void operator[](int &i) const { }
void operator[](int &i) { }
};

int main()
cout<<sizeof(array<100,int>)<<endl;
cout<<sizeof(array<100,void>)<<endl;
}

您也可以为您的 Graph 类进行专门化,但我认为仅专门化数组包装器的工作较少。

无论如何,最好的想法似乎是使 Node 成为 Graph 中的通用类型,提供没有额外数据的基本 Node 实现,并让用户定义自己的派生节点类型,如“500 - Internal Server Error”所建议的那样,除非您根本不需要在图表中存储关于该节点的任何其他内容。

关于c++ - 如果我们不想要模板/泛型中的任何数据类型怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470902/

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