gpt4 book ai didi

c++ - CRTP子类和实例列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:43 24 4
gpt4 key购买 nike

我正在尝试实现一种具有多重继承的 CRTP(如果我很了解它是什么)。

我的主要目标是有一个统一的方式来访问每个子类的实例列表。

可能问题似乎出在命名空间的使用上。

这是最简单版本的代码: http://ideone.com/rFab5

我真正的问题更类似于: http://ideone.com/U7cAf

我有一个使用 clang++ 的额外警告:

test.cpp:28:63: warning: static data member specialization of 'instances' must originally be declared in namespace 'NS1'; accepted as a C++0x extension [-Wc++0x-extensions]
template <> std::list<NS1::Derived*> NS1::Base<NS1::Derived>::instances;
^
test.cpp:15:34: note: explicitly specialized declaration is here
static std::list<T*> instances;

问题已更新,因为它使用命名空间的行为不同。

问题重新编辑以在 Ideone 上发布代码

最佳答案

问题是您试图错误地定义列表变量。一般来说,您需要为 Base 提供一个定义 - 您不能只为恰好是 Derived 的子类的那一部分定义它,除非它是一个显式特化。

template<typename T> std::list<T*> NS1::Base<T>::instances;

http://ideone.com/Vclac

编译没有错误。不需要中间体或任何类似的东西。

关于c++ - CRTP子类和实例列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6313304/

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