请考虑以下代码:
#include <iostream>
class CTest
{
public:
CTest() : c(0)
{}
void Method1()
{
c++;
std::cout<<"c: "<<c<<std::endl;
}
private:
int c;
};
int main()
{
CTest A,B,C;
A.Method1();
B.Method1();
C.Method1();
return 0;
}
c:1
c:1
c:1
对于此类型的每个对象,c
值不同。为了避免名称冲突,我有兴趣将c
变量放在函数中,因为Method1
是唯一应该使用它的地方。我关心的是如何使它独立于每个不同的对象。有没有内置的C ++解决方案?
#include <iostream>
class CTest
{
public:
CTest()
{}
void Method1()
{
static int c=0;
c++;
std::cout<<"c: "<<c<<std::endl;
}
private:
};
int main()
{
CTest A,B,C;
A.Method1();
B.Method1();
C.Method1();
return 0;
}
c:1
c:2
c:3
答案 0 :(得分:1)
您可以使用模板执行此操作,
template <typename int> class CTest
{
void Method1()
{
static int c = 0;
}
};
并实例化CTest<1> A;
,CTest<2> B;
等,注意每次使用不同的int
。这样,每c
个<n>
就会得到Method1
,这是CTest
的本地{{1}}。但这是非常人为的,如果你想动态地实例化{{1}},那就不行了,我也不认为我会在生产中使用它。
也许使用pImpl习语的方法会更好。
答案 1 :(得分:0)
如果这只是一个命名问题,那么您可以使用不同的名称:
class CTest
{
public:
void Method1()
{
int& c = unique_but_similar_to_something_else;
c++;
std::cout << "c: " << c <<std::endl;
}
private:
int unique_but_similar_to_something_else;
};
这允许您的变量在类范围内具有正确的名称,但在方法范围内具有更友好的名称。
答案 2 :(得分:-1)
class CTest
{
public:
CTest() : MY__c(0)
{
}
void Method1()
{
int& c = MY__c; // now c is of different meaning and doesn't spoil the "c" we want to have no conflicts with...
c++;
std::cout << "c: " << c << std::endl;
}
private:
int MY__c;
};