我有一个像这样的抽象基类:
class AbstractBaseClass
{};
Run Code Online (Sandbox Code Playgroud)
从中衍生出来的模板化具体类:
template<class T>
class ConcreteClass : public AbstractBaseClass
{
public:
ConcreteClass(T input) : data(input) {}
private:
T data;
};
Run Code Online (Sandbox Code Playgroud)
我有一个创建AbstractBaseClasses的工厂类
class MyFactory
{
public:
boost::shared_ptr<AbstractBaseClass> CreateBlah();
boost::shared_ptr<AbstractBaseClass> CreateFoo();
template<class T>
boost::shared_ptr<AbstractBaseClass> Create(T input)
{
return boost::shared_ptr<AbstractBaseClass>(new ConcreteClass<T>(input));
}
};
Run Code Online (Sandbox Code Playgroud)
这个问题是,现在使用MyFactory的一切都必须将整个实现包含在ConcreteClass中.理想情况下,除了MyFactory之外我什么都不想了解ConcreteClass.
有没有办法设计这个来实现这个目标?(除了在MyFactory中为我想要的每种类型手动创建一个新的Create函数,而不是模板化它).
我正在向一群对函数式语言经验很少的C/C++程序员做一个简短的演讲.部分演示文稿提到了Erlang,我想提供一个特定的小代码示例.
关于如何/在何处使用Erlang及其优势,StackOverflow上有大量令人敬畏的信息.我看到的最常见的优势之一是它如何通过一些简洁的代码来做很多事情,特别是与C/C++相比.
我正在寻找一个很好的Erlang代码片段,它只是简单地说明了这些类型的好处.特别是在Erlang中很容易用几行完成的东西,这在C/C++中要复杂得多.
有人有什么有趣的建议吗?