Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向公共API公开内部类的最佳方式是什么?_C++_Api_Class_Interface - Fatal编程技术网

C++ 向公共API公开内部类的最佳方式是什么?

C++ 向公共API公开内部类的最佳方式是什么?,c++,api,class,interface,C++,Api,Class,Interface,我有一个使用另一个库(dll)中的类的库 现在我的库需要使用foodll并使用它的一些功能和类,但不公开foo库类型,而是一些“转换” 公共API将公开类core::Component和core::Element,但实际上这些应该是对foo::Component和foo::Element的直接翻译。再想象一下,这个翻译需要为许多其他类完成,这些类需要打包才能公开。 处理此问题的最佳方法是什么?您正在寻找的是指令吗 namespace foo { class A {}; } namesp

我有一个使用另一个库(dll)中的类的库

现在我的库需要使用foodll并使用它的一些功能和类,但不公开foo库类型,而是一些“转换”

公共API将公开类core::Component和core::Element,但实际上这些应该是对foo::Component和foo::Element的直接翻译。再想象一下,这个翻译需要为许多其他类完成,这些类需要打包才能公开。
处理此问题的最佳方法是什么?

您正在寻找的是
指令吗

namespace foo {
    class A {};
}

namespace core {
    using foo::A;
}

// use like
core::A a;

写“translation”是什么意思?我需要一个与foo::Element完全相同的类core::Element,我只是不想公开foo类,而是它的一部分。在这种情况下,包装只是为了隐藏底层类不是在我的库中开发的,而是在外部库(foo)中开发的。有什么技巧可以做到吗?像typedefs,或者使用(在c++11中)?如果是相同的,为什么要隐藏它?不同的客户,提供相同的功能。听起来你想要一个PIMPL:例如,如果类a有方法getValue()和setValue(),我的库的最终用户将如何看到这些?如果我使用您的解决方案,但不公开来自foo库的头,这怎么可能?@FCR,如果您不想复制库头,您将不得不公开库头。谢谢,如果foo库(和头)包含许多我不希望客户使用的其他公共类,该怎么办。因为我希望客户使用Foo库,但通过我的核心库,通过发送Foo头和库,我让用户使用Foo的全部功能,避免使用我的核心库,对吗?那么,是否有可能只发送Foo所有标题的子集?
// my developed library "Core"
namespace core{
class Component( Element e ){
...
}
}
namespace foo {
    class A {};
}

namespace core {
    using foo::A;
}

// use like
core::A a;