繁体   English   中英

模板参数名称作为基类

[英]template parameter name as base class

我有以下几种类型:

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的示例测试单元的代码我得到了错误:

对于visual c ++:

在'<'之前缺少','

请参阅正在编译的类模板实例化'memory_algorithm'的引用

对于GCC:

错误:'<'标记之前的预期模板名称

错误:在'<'标记之前预期'{'

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

有什么问题以及如何解决?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM