【问题标题】:Is it possible to include code only inside one class?是否可以仅在一个类中包含代码?
【发布时间】:2018-02-02 13:19:41
【问题描述】:

我希望我能解释一下自己。

假设我有下一个:

文件“A.h”:

#include "C.h"

public class A{
    // Some code...
}

文件“B.h”:

#include "A.h"

public class B{
    A a = new A();      //With this line I mean I'm using one instance of "A" inside "B.h"
    //Some code...
}

是否可以只在“A.h”中包含“C.h”?

我的问题是我包含的代码与通常的函数有很多冲突。一个一个地纠正冲突不是一种选择,因为它们有很多。另外,我包含的“C.h”代码只是一个测试代码:经过一些测试,我将删除包含行。

有什么方法可以“冒泡”我的包含吗?

提前谢谢你。

编辑:A.h 和 B.h 在同一个命名空间中。

【问题讨论】:

  • 尝试使用命名空间。 (C++ 建议,可能有效或无效)
  • @user202729 我忘了谈论我的命名空间。请参阅我附加到我的问题的 EDIT 行。
  • 我的意思是this

标签: include c++-cli


【解决方案1】:

是否可以只在“A.h”中包含“C.h”?

没有。据我所知。


如果您有名称冲突,只需将 C.h 包含在其他名称空间中,就像 @user202729 建议的那样。这会有所帮助。


但我猜你在 A 中使用 C 进行测试,如果没有与 C++Cli 或 B.h 的内容不兼容的实现,你不能在 A 中的 C 中使用它。

我们使用了 pimpl ideom(指向实现的指针)。 例子: c++/clr 目前不允许 do 直接包含,这就是为什么有时你不能使用你想使用的库(比如 C.h),因为它们确实依赖于 .

这是我的 C.h(被所有其他标题使用)

            struct LockImpl; // forward declaration of C.

            class C
            {
            public:
                C();
                virtual ~C();

            public:
                void Lock() const;
                void Unlock() const;
                LockImpl* _Lock;
            };

这是我的 C.cpp(编译时没有 /clr)

            #include <mutex>

            struct LockImpl
            {
                std::mutex mutex;
            };

            C::C() : _Lock(new LockImpl()) {}
            C::~C() { delete _Lock; }

            void C::Lock() const
            {
                _Lock->mutex.lock();
            }

            void C::Unlock() const
            {
                _Lock->mutex.unlock();
            }

啊.h

#include "C.h"

public class A{
   C c;
   void someMethod()
   {
      c.Lock() // I used another template for a RAII pattern class.
      c.Unlock() 
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2020-04-12
    • 2013-10-29
    相关资源
    最近更新 更多