gpt4 book ai didi

c++ - 模板参数名称作为基类

转载 作者:太空狗 更新时间:2023-10-29 21:02:18 25 4
gpt4 key购买 nike

我有以下类型:

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 类的模板参数,我称之为选项。基类可能是 memory_track 的部分特化或其子类,因此在 memory_algorithm 中我传递了 2 个模板参数,其中一个代表类名 - 即 track - 另一个代表 memory_options 类 - 即 options - 现在每当我尝试使用 GCC 和 Visual C++ 2008 编译带有示例测试单元的代码时,我得到了错误:

对于 Visual C++:

missing ',' before '<'

see reference to class template instantiation 'memory_algorithm' being compiled

对于海湾合作委员会:

error: expected template-name before '<' token

error: expected '{' before '<' token

error: expected unqualified-id before '<' token

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

最佳答案

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

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

关于c++ - 模板参数名称作为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com