我有以下几种类型:
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
将继承自另一个类,该类将始终采用代表template parameter
类的memory_options
,我称之为options
。基类可以是来自memory_track
的部分特化或来自它的子类,所以在memory_algorithm
我传递了2个模板参数,一个代表类名 - 即track
- 另一个代表memory_options
类 - 即options
- 现在每当我尝试使用GCC和Visual C ++ 2008使用样本测试单元编译代码时,我都会收到错误:
用于visual c ++:
海湾合作委员会在'&lt;'
之前缺少','参见正在编译的类模板实例化'memory_algorithm'的引用
:
错误:'&lt;'之前的预期模板名称令牌
错误:在'&lt;'之前预期'{'令牌
错误:在'&lt;'之前预期的unqualified-id令牌
问题是什么以及如何解决?
答案 0 :(得分:4)
如果我正确理解了您的问题,您需要的是使track
成为模板模板参数,而不是常规类型参数:
template <typename options, typename prov, template<typename> class track>
// ^^^^^^^^^^^^^^^^^^^^^^^^
struct memory_algorithm : public track < options > {};