
[英]Using child class as a template parameter of a base class and as a nested name specifier
[英]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.