【发布时间】:2021-02-11 13:20:44
【问题描述】:
我正在尝试将旧项目上的 boost::object_pool 使用转换为新的 Visual Studio 2019 项目,我使用的是 boost 1.56 版
ObjectPool.h
class BOOST_OBJECT_POOL_CHECKER
{
boost::object_pool< T > m_sObjectPool;
template <class Arg1>
T* contruct(Arg1& sArg1)
{
T* temp = m_sObjectPool.construct(sArg1);
return temp;
}
}
MaterialServer.h
class MaterialServer
{
MaterialServer(dword serviceType, std::string path);
Material* NEW_MATERIAL();
}
材料.h
class Material
{
BOOST_OBJECT_POOL_CHECKER<Material> m_poolMATERIAL;
Material(MaterialServer* pMatServer);
}
材料.cpp
Material* MaterialServer::NEW_MATERIAL()
{
//Material* returnMaterial = m_poolMATERIAL.construct(this); << error on vs2019, not correct parameter
Material* returnMaterial = m_poolMATERIAL.construct(*this);
}
遇到第一个错误
boost_1_56\boost\pool\detail\pool_construct_simple.ipp(19,1): error C2664: 'Material::Material(MaterialServer*)': cannot convert argument 1 from 'const T0' to 'MaterialServer *'
ObjectPool.h(68): message : see reference to function template instantiation 'Material *boost::object_pool<T,boost::default_user_allocator_new_delete>::construct<Arg1>(const T0 &)' being compiled
with
[
T=Material,
Arg1=MaterialServer,
T0=MaterialServer
]
我需要升级 boost 版本吗?因为之前这段代码在vs2008上编译得很好,但在vs2019上编译不出来,这个c++11标准让我很困惑
我能解释一下这种行为吗?
【问题讨论】:
-
在阅读之前。请升级提升。使用 2015 年的版本和更新的编译器是没有意义的。很明显,编译器不在支持的平台列表中
-
"Your code was missing some semicolons here and there, and the union was missing member names." - 这是你的问题中相当烦人的模式,@navirius。如果您想发布一个指向您的实际代码库(github?)的链接,我宁愿按原样查看它......当然,这可能工作量太大,但我想它会比去更快一个一个地处理这些,每次都得到一张扭曲的代码图片。
标签: c++ boost visual-studio-2019 visual-studio-2008-sp1