gpt4 book ai didi

c++ - Boost::Container::Vector with Enum Template Argument - 不是合法的基类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:51 24 4
gpt4 key购买 nike

我将 Visual Studio 2008 与 Boost v1.42.0 库一起使用。如果我使用枚举作为模板参数,则在使用 push_back() 添加值时会出现编译错误。编译错误是:'T': is not a legal base class 错误位置是move.hpp line 79.

#include <boost/interprocess/containers/vector.hpp>

class Test {
public:
enum Types {
Unknown = 0,
First = 1,
Second = 2,
Third = 3
};
typedef boost::container::vector<Types> TypesVector;
};

int main() {
Test::TypesVector o;

o.push_back(Test::First);

return 0;
}

如果我改用 std::vector 它会起作用。如果我先调整 Boost 版本的大小,然后使用 [] 运算符设置值,它也可以工作。

有什么方法可以使用 push_back() 来完成这项工作吗?


错误的模板回溯:

error C2516: 'T' : is not a legal base class1>        main.cpp(21) : see declaration of 'T'1>        main.cpp(21) : see reference to class template instantiation 'boost::interprocess::rv' being compiled1>        with1>        [1>            T=Test::Types1>        ]

最佳答案

我认为您确实发现了一个错误。我已发布到 Boost ML 以跟踪问题并尝试获取更多信息。

目前,我看到的唯一解决方法是如下专门化 rv 类,但我不确定这是否适用于所有情况。

namespace boost {
namespace interprocess {

template <>
class rv<Test::Types>
{
Test::Types v;
rv();
~rv();
rv(rv const&);
void operator=(rv const&);
operator Test::Types() const {return v;}
};

}}

如果这不起作用,您可以尝试使用 int 而不是 enum。

 enum {
Unknown = 0,
First = 1,
Second = 2,
Third = 3
};
typedef int Types;

当然这有失去枚举安全性的缺点。

关于c++ - Boost::Container::Vector with Enum Template Argument - 不是合法的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678476/

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