我有一个带有纯虚函数的基类:
class Allocator
{
public:
template< class T >
virtual T* allocate(T type) = 0;
};
使用带有模板化函数的派生类,其设计意图是覆盖此虚函数:
class StackAllocator: public Allocator
{
public:
StackAllocator(size_t size, void* stackStart = nullptr);
template< class T>
T* allocate(T Type);
};
我的设计意图是在Allocator中分配覆盖分配。但显然在阅读完之后,我发现上面的代码不起作用。
我发现很多解决方案都涉及使类本身成为模板,但在这种情况下我无法做到这一点,因为StackAllocator本身在编译时需要与类型无关。只有函数才能处理不同的类型。
我找到了一个解决方案,包括进行分配&#39;在每个分配基础上使用的类处理分配本身,但这似乎是浪费而且在其应用中不是很清楚,所以现在我只是简单地摆脱虚函数并仅使用模板派生类功能
我有什么想法可以做到这一点?或者如何重新设计我的设计的想法? (请记住,我最终会制作更多派生的分配器,因此必须使用基础。)
谢谢!
答案 0 :(得分:0)
想象一下这段代码是否有效,您将如何使用它?
你会有一些东西会被分配器参数化,但由于它返回了特定的类型,因此该东西必须知道如何处理该特定类型。这意味着代码要么不是通用的(这意味着没有理由拥有公共基类,因为代码必须专门用于特定的分配器类型),或者模仿从分配器中获取匹配类型,但是没有因为你可以创建一个非常具体的工厂类(allocator)来匹配使用它的事物的模板化类型。
您并不真正需要模板化的分配方法 - 因为特定的分配器子类不能生成任何类型。它只能使其成为一种特定类型。听起来对我来说可能你想用部分专业来实现这个目标吗?
http://en.cppreference.com/w/cpp/language/partial_specialization
并使用那些模板化的东西到您想要创建的类型的部分特化?