在C ++中封装辅助函数的正确方法是什么?

时间:2020-09-11 06:31:14

标签: c++

上课:

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}}运算符,而不是为了方便而使用()函数。正确的方法是什么?

2 个答案:

答案 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();
}