我试图更改对象内部的类的私有变量,该对象在该类内部初始化.
我的意图可以从下面的简单示例中得出.
从obj调用的Increment应该增加BaseClass :: stuff.
template <typename ObjectType>
class BaseClass{
public:
int Increment(){
return obj.Increment();
}
private:
int stuff = 0;
ObjectType obj;
};
class ObjectType{
public:
int Increment ()
{
return BaseClass<ObjectType>::stuff++;
};
};
int main () {
BaseClass<ObjectType> base;
base.Increment(); // should increase stuff by 1;
}
我可以想到的一种方法是将东西作为参数传递给obj.Increment().
有没有一种方法可以在不将其作为参数传递的情况下实现?
解决方法:
您的示例有一些错误.
修复并添加好友说明符后,它应如下所示:
template <typename ObjectType>
class BaseClass{
public:
friend ObjectType;
int Increment(){
return obj.Increment();
}
private:
static int stuff;
ObjectType obj;
};
template<typename T>
int BaseClass<T>::stuff = 0;
class ObjectType{
public:
int Increment ()
{
return BaseClass<ObjectType>::stuff++;
};
};
int main () {
BaseClass<ObjectType> base;
base.Increment(); // should increase stuff by 1;
}