如何使用与函数同名的变量?

时间:2017-08-14 18:15:32

标签: c++ templates

我有给定的模板类,其中包含以下属性/类

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而不是函数?

此外,在人们提交代码改进和其他建议之前。这是一个不允许重命名/修改变量的考试示例,只允许您根据需要添加内容。

1 个答案:

答案 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;方法我在这里调用。