无法理解范围解析运算符的使用

unable to understand use of scope resolution operator

::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 是 return 类型。在主函数中,使用此语句调用 RunMPPGraph() ---> ::mediapipe::Status run_status = RunMPPGraph();,这意味着 ::mediapipe::Status 是某种形式的用户定义数据类型。所以我想知道我们是否可以将 ::mediapipe::Status 分解成更小的部分?

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

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

 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.

中的静态变量
 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项。

说的很直接,估计你对命名空间不熟悉。

::mediapipe::Status RunMPPGraph()

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