模板参数名作为基类

template parameter name as base class

本文关键字:基类 参数      更新时间:2023-10-16

我有以下类型:

typedef unsigned int uint32;
typedef void* ptr;
struct memory_options {};
struct memory_provider {};
template <typename options>
struct memory_track {};
template <typename options>
struct no_memory_track : public memory_track<options> {};
template<typename options>
struct defrag_memory_track : public memory_track<options> {};
template<typename options>
struct full_memory_track : public memory_track<options> {};
template <typename options, typename prov, typename track>
struct memory_algorithm : public track < options > {};
int main()
{
}

此类型用于定义自定义内存管理器。

问题是类memory_algorithm将继承另一个类,该类将始终采用代表memory_options类的template parameter,我称之为options。基类可能是memory_track或其子类的部分特化,因此在memory_algorithm中,我传递了2个模板参数,一个代表类名-即track -另一个代表memory_options类-即options -现在每当我试图使用GCC和Visual c++ 2008编译样本测试单元的代码时,我得到了错误:

for visual c++:

在'<'之前缺少','

参见编译类模板实例化'memory_algorithm'的参考

为GCC:

错误:期望模板名在'<'标记前

错误:期望'{'先于'<'标记

错误:'<'标记前预期的unqualified-id

问题是什么?如何解决?

如果我正确理解您的问题,您需要的可能是使track成为模板模板参数,而不是常规类型参数:

template <typename options, typename prov, template<typename> class track> 
//                                         ^^^^^^^^^^^^^^^^^^^^^^^^
struct memory_algorithm : public track < options > {};
相关文章: