- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一种情况,我们为应用程序开发 DLL 插件。所有插件都有一组通用的源文件。但是,我希望将它们分离到一个基础库中。我们有以下实现,它们只是一个 DLL 项目的一部分:
// dllentry class
BaseImporter* spImporter = NULL;
extern BaseImporter* createImporterImplementation(const std::string& pDllFileName);
int __stdcall DllImportOpen(
const char* pDllFileName,
const char** ppImporterUniqueName,
const char** ppImporterVersion)
{
// method implementation in concrete class source file
spImporter = createImporterImplementation(pDllFileName);
(*ppImporterUniqueName) = spImporter->GetUniqueName();
(*ppImporterVersion) = spImporter->GetImporterVersion();
return (0);
}
// base importer class
class BaseImporter()
{
public:
const char* GetUniqueName() const {return mUniqueName.c_str();}
const char* GetImporterVersion() const {return mVersion.c_str();}
protected:
// some pure virtual methods here
}
// concrete class
class XImporter : BaseImporter()
{
// implement base importer
}
// resides in XImporter source file
BaseImporter* createImporterImplementation(
const std::string& dll_filename)
{
return new XImporter (dll_filename);
}
当作为 1 个 DLL 一起构建时,这工作正常。但是,我想将 dllentry 类和 BaseImporter
分离到一个基础库中。这显然会在编译基础库时产生链接器错误,因为它将搜索 createImporterImplementation
的实现。我怎样才能很好地分离出可以与具体库一起使用的基础库?
最佳答案
一种解决方案是后期绑定(bind)到 createImporterImplementation。尝试类似的东西(注意,根本没有测试,可能在细节上是错误的)
// in base DLL:
BaseImporter* createImporterImplementation(
const std::string& dll_filename)
{
HMODULE h - LoadLIbrary (dll_filename.c_str());
BaseImporter* (*fn)() = GetProcAddress(h, CreateImporterImplementation);
return (*fn)();
}
然后在具体的导入器中:
__declspec(dllexport) BaseImporter* createImporterImplementation()
{
return new XImporter;
}
这是否回答了问题?
关于c++ - 关注点分离 : Create base library and remove dependencies on concrete classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509655/
我有一个非常简单的类,如下所示: abstract class Person { private $id; private $createdOn; // ... More pr
我需要在扩展AbstractClass的每个ConcreteClass中定义常量值。由于某种原因,对象最终会具有重复的字段,一组字段等于零,下一组字段具有正确的值。 某些接口(interface) p
在阅读 this article 中的工厂时,我遇到了这两个术语 AbstractFactory 和 ConcreteFactory。 在阅读 StackOverflow 时,我发现了一些很好的答案(
public class GenericClass { class MyClass { } public GenericClass(final T[] param) {
我在同一代码中遇到了另一个问题......我收到此错误: initialization method -initWithCharactersNoCopy:length:freeWhenDone: ca
我在研究 concolic testing 的概念时遇到了术语“具体和符号执行” . (那里提到的文章“CUTE:C 的混合单元测试引擎”在其摘要部分使用了该术语。) "The approach us
我在运行 Streaming API 时遇到了 tweepy 问题,但我的问题不仅仅与 tweepy 直接相关。 我遇到了多个异常,我认为我可以暂时“捕获/通过”,作为临时解决方案,直到找出问题所在。
我想将表单结果写入另一个数据库。 在 Concrete 5.6 中,您可以即时切换到另一个数据库。我无法找出它在 Concrete 5.7 中的工作原理。 5.6 方式 $db = Loader::d
我该怎么做才能防止编译器抛出以下警告 Missing concrete implementation of setter 'MyClass.field' and getter 'MyClass.fie
我们是 Glass mapper 的新手,想在我们的 Sitecore 项目中使用它。在查看教程时,我们注意到没有关于如何设置 Sitecore 允许的深度继承的深入示例。浏览网页时,我们注意到有人将
在自定义 Concrete5 代码 (5.7+) 中执行服务器端重定向的正确方法是什么? 最佳答案 我发现这是最好的方法: (new RedirectResponse('/URL-HERE'))->s
我正在开发一个建筑项目的库存控制系统。保管人负责添加新库存并将其分配给员工或从员工退还。这些项目(以及它们的属性)将有很大的不同。例如钢铁制品,服装,工厂/机械,工具等 我的问题是要使用Class/C
我有类Bar(可能还有许多其他类),它扩展了抽象类AbstractFoo。将 Bar 实例转换为 FooDTO 时,会检测具体类。 但是,当将 Bar 实例集合转换为 FooDTO 列表时,具体的类信
我有一个接口(interface)和一个定义如下的类 public interface IShape { } public class Square : IShape { } 我知道我可以在结构图中为
我正在this中学习工厂模式关联。在编写了一个普通的工厂之后,作者继续设计一个工厂,我们不必修改工厂的代码来添加新的具体实现。 (假设有一个 Product 接口(interface),工厂提供它的实
我有一个“提供者工厂”,它创建具体提供者的实现。要创建正确的实现,除其他参数外,它还需要 typeId。问题是为了将正确的 typeId 传递给工厂,我需要验证并在必要时更改它。为了做到这一点,除其他
在使用模型继承时,我试图找到 django 模型对象的实际类。 一些描述问题的代码: class Base(models.model): def basemethod(self):
我使用 vim 并尝试使用“Vundle”。它有助于像在 Ruby on Rails 中一样安装插件: Bundle 'scrooloose/nerdtree' Bundle 'scrooloose/
我对使用具体类和接口(interface)的影响有一些疑问。 说一些代码块(称之为chunkCode)使用具体类A。如果出现以下情况,我是否必须重新编译 chunkCode: 我向 A 添加了一些新的
所以我遇到了一个问题,我正在尝试实现父级的父级的具体版本,如下所示。 public abstract class Collection { ... } public abstract class
我是一名优秀的程序员,十分优秀!