1
::mediapipe::Status RunMPPGraph() {
  std::string calculator_graph_config_contents;
  MP_RETURN_IF_ERROR(mediapipe::file::GetContents(
      FLAGS_calculator_graph_config_file, &calculator_graph_config_contents));
  LOG(INFO) << "Get calculator graph config contents: "
            << calculator_graph_config_contents;
  mediapipe::CalculatorGraphConfig config =
      mediapipe::ParseTextProtoOrDie<mediapipe::CalculatorGraphConfig>(
          calculator_graph_config_contents);

这是 Google 的Mediapipe提供的较大代码的一小部分,它使用范围解析运算符来定义RunMPPGraph(). 我对这个定义一无所知。有人可以告诉我发生了什么吗?

这看起来像一个函数,我很确定它是:::mediapipe::Status RunMPPGraph()...但定义函数的基本方法是 ---> ReturnType FunctionName(parameters),在这个程序RunMPPGraph中是名称,所以这意味着::mediapipe::Status返回类型。在主函数中,RunMPPGraph() 是用这个语句调用的 --->::mediapipe::Status run_status = RunMPPGraph();所以这意味着::mediapipe::Status是某种形式的用户定义的数据类型。所以我想知道我们是否可以分解::mediapipe::Status成更小的部分?

4

2 回答 2

7

C++ 中的解析运算符以不同的方式使用:

1-访问另一个类中的类:

 class A
 {
    ...
    class B
    {
        static int var;
    }
 }
 int x =A::B::var.

2-当存在同名的局部变量时访问全局变量。

int gval = 5;
{
    int gval = 10;
    int y = ::gval;//the value assign for y is 5
}

3-访问类中的静态变量。

 class A
 {
    static int x;
 };
 int y = A::x;

4-从多重继承中使用时。

class A
{
   protected:
     int l;
}
class B
{
   protected:
     int l;
}
class c: class A, class B
{
   public:
    int f()
    {
       int c1 = A::l;
       int c2 = B::l;
    }
}

5- 对于命名空间。

您的情况满足第 2 项。

于 2020-08-23T06:08:28.793 回答
4

这很简单,我猜你不熟悉命名空间。

::mediapipe::Status RunMPPGraph()

RnuMMPGraph是一个接受零参数并返回的函数::mediapipe::Status。是在全局命名空间中定义Status的命名空间中定义的类型。mediapipe

于 2020-08-23T06:14:11.770 回答