【问题标题】:how can i convert my class into a namespace如何将我的类转换为命名空间
【发布时间】:2019-01-28 17:31:14
【问题描述】:

我在 c++ 中有一个类,我想将其转换为命名空间 我试图在谷歌中环顾四周,但找不到任何可以使我的类成为命名空间的解决方案。 我怎么做?它是一个包含 3 个函数的类。 例如:

class c
{
public:
    void A();
    void B();
    void X();
}

我希望能够在不创建类的新对象的情况下使用这些函数,我想成为一个命名空间。 具有函数 a()、b()、x() 的类 C 将变成命名空间。 ps,我有 CLion 2017 太棒了

【问题讨论】:

  • 如果您想在没有c 类实例的情况下使用函数ABC,则这些函数的实现可能需要进行重大更改。很难告诉您该做什么,因为这取决于这些功能的实现方式。

标签: c++ class namespaces


【解决方案1】:

这比你想象的要容易得多。

namespace c
{
    void A();
    void B();
    void X();
}

【讨论】:

  • 以及我如何将它包含在我的 main.cpp 中?
  • @YoavLinder 与包含类定义的方式相同。
  • 我试过了,但它不承认这一点。它涂成红色
  • @YoavLinder 你需要提供一个minimal reproducible example
  • 此更改不起作用,因为成员函数最初不是 static。如果没有相反的证据,您必须假设 this 是有意义的。必须对这些功能的含义或用法进行重大更改才能使此更改适用。
【解决方案2】:

你可能想要这样的东西:

foo.cpp

#include "bar.h"

int main()
{
  bar::A();
  bar::B();
}

bar.h

namespace bar
{
  void A();
  void B();
}

bar.cpp

#include "bar.h"

namespace bar
{
  void A()
  {
    ...
  }

  void B()
  {
     ..
  }
}

为简洁起见,这是一个没有标头保护的最小示例。

【讨论】:

    【解决方案3】:

    您可能想要使用静态函数

    class MyClass
    {
    public:
        static void A();
    }
    

    然后你可以像这样调用这些函数:

    MyClass::A();
    

    【讨论】:

    • 仅在您希望仍然能够拥有 MyClass 的实例时才推荐
    • 当然!如果您从未打算实例化 MyClass,请使用命名空间(molbdnilo 答案)。
    • @Korni 或者如果您需要它作为模板的类型参数。
    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2013-04-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多