3

我有以下类型:

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 的单元我得到了错误:

对于视觉 C++:

在 '<' 之前缺少 ','

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

对于海湾合作委员会:

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

错误:在“<”标记之前应为“{”

错误:“<”标记之前的预期不合格 ID

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

4

1 回答 1

4

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

template <typename options, typename prov, template<typename> class track> 
//                                         ^^^^^^^^^^^^^^^^^^^^^^^^
struct memory_algorithm : public track < options > {};
于 2013-04-01T15:42:00.053 回答