上课:
class myClass{
// ...
private:
int helperFuncForA();
int secondhelperFuncForA();
public:
void A();
// ...
};
假设没有在A
之外使用辅助函数;如何封装它们,以致无法在A
之外调用它们?我该怎么办?
class myClass{
// ...
public:
class {
private:
int helperFuncForA();
int secondhelperFuncForA();
public:
void call();
} A;
// ...
};
然后通过写信进行呼叫:
myClass obj;
obj.A.call();
?也许,我可以重载A
的{{1}}运算符,而不是为了方便而使用()
函数。正确的方法是什么?
答案 0 :(得分:1)
如果某些方法只能在void A()函数中使用,则可能需要一个类。
但是您可以根据需要执行以下操作:
#include <iostream>
class ClassTest
{
public:
struct A{
private:
void helperFunc() {
std::cout << "Executing Helper Func " << std::endl;
}
public:
void operator() (){
helperFunc();
}
};
A a;
void classFunc(){
//a.helperFunc(); <- Impossible helperFunc private
a();
}
};
int main()
{
ClassTest c;
c.classFunc();// Print : Executing Helper Func
//OR
c.a();// Print e: Executing Helper Func
}
答案 1 :(得分:1)
正确的方法是使用lambda:
class myClass{
// ...
private:
// remove from here
//int helperFuncForA();
//int secondhelperFuncForA();
public:
void A();
// ...
};
// somewhere
void myClass::A()
{
auto helperFuncForA = [this]() -> int
{
//...
return 1;
};
auto secondhelperFuncForA = [this]() -> int
{
//...
return 2;
};
//...
int x = helperFuncForA();
x += secondhelperFuncForA();
}