我有给定的模板类,其中包含以下属性/类
template<class T1, class T2, int max>
class Collection{
T1 * _elementi1[max];
T2 * _elementi2[max];
int currently;
public:
Collection() {
for (size_t i = 0; i < max; i++) {
_elementi1[i] = nullptr;
_elementi2[i] = nullptr;
}
currently = 0;
}
~Collection() {
for (size_t i = 0; i < max; i++) {
delete _element1[i]; _element1[i] = nullptr;
delete _element2[i]; _element2[i] = nullptr;
}
}
T1 ** GetT1() { return _element1; }
T2 ** GetT2() { return _element2; }
int GetCurrent() { return currently; }
void Add(T1 t1, T2 t2) {
if (currently == max)
{
throw exception("MAX SIZE REACHED");
}
_element1[currently] = new T1(t1);
_element2[currently] = new T2(t2);
++currently;
}
friend ostream& operator<< (ostream &COUT, Collection&obj) {
for (size_t i = 0; i < obj.currently; i++)
COUT << *obj._element1[i] << " " << *obj._element2[i] << endl;
return COUT;
}
};
Max
用于限制集合的容量(我知道愚蠢..)问题是我使用#include <algorithm>
也有一个名为max
的函数。每次我想使用变量Intellisense并且编译器使用函数而不是变量。我如何告诉编译器使用变量max
而不是函数?
此外,在人们提交代码改进和其他建议之前。这是一个不允许重命名/修改变量的考试示例,只允许您根据需要添加内容。
答案 0 :(得分:1)
未经修改的考试示例&#39;编译?
是的,假设我没有包含算法
我说这是你添加了一个&#34; using namespace std;&#34;在某个地方,也许是为了从&lt;算法&gt;
如何告诉编译器使用变量max而不是 功能
一种方法是取消编译器请求,将所有或任何命名空间std函数引入本地命名空间......我的意思是删除&#34; using namespace std;&#34;
现在,您可能需要&lt;算法&gt; ...如何在没有拉入&#34; std :: max&#34;
的情况下得到它示例:from&lt;算法&gt;,我经常使用shuffle()
#include <algorithm>
// ... then I usually do
std::shuffle (m_iVec.begin(), m_iVec.end(), gen);
// I have no problem using the std:: prefix.
此时编译器也知道函数std :: max(),但不会与变量名冲突。访问该函数的唯一方法是通过&#34; std :: max()&#34;符号
还有另一种使用&#39;的形式,如下所示:
#include <algorithm>
// now 'bring in' the feature you want.
using std::shuffle; // pull in shuffle, BUT NOT std::max
// ... so I now can do
shuffle (m_iVec.begin(), m_iVec.end(), gen);
// and have no worries about max being interpreted as a function
max = 0;
永远在我必须搜索提示/提醒其中&#39; shuffle()&#39;方法我在这里调用。