当我们使用来自STL
的通用数据类型或我们自己实现的泛型类时,我们可以选择不指定数据类型...... ???
示例:
如果我正在创建一个图库......某些使用该库的人可能想要在节点中存储一些数据,而某些人可能只对节点之间的连接感兴趣....
所以提供一个通用库,我们把一些数据变量说成
template <class T>
class Graph
{
T data[number_of_nodes]; // This somehow corresponds to data stored in each node
Edge e[number_of_edges];
}
不,如果我根本不想要任何数据变量我应该做什么......?
答案 0 :(得分:2)
如果你允许我将普通数组包装在一个类中,你可以对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实现,并让用户定义自己的派生节点类型,如&#34; 500所示 - 内部服务器错误&#34;,除非您不需要存储关于图表中节点的任何其他内容。