C++ 嵌套boost::assign:Visual Studio 2012中的断开列表\u-对重载函数的不明确调用
这在Visual Studio 2010中有效,但在2012更新2(使用Boost 1.5.3)中不起作用:C++ 嵌套boost::assign:Visual Studio 2012中的断开列表\u-对重载函数的不明确调用,c++,boost,visual-studio-2012,C++,Boost,Visual Studio 2012,这在Visual Studio 2010中有效,但在2012更新2(使用Boost 1.5.3)中不起作用: vector data=assign::list_of(assign::list_of(0x06)(0x02)); 编译器给出的错误(已更新): C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0(617):错误C2668:'std::vector::vector':对重载函数的调用不明确 具有 [
vector data=assign::list_of(assign::list_of(0x06)(0x02));
编译器给出的错误(已更新):
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0(617):错误C2668:'std::vector::vector':对重载函数的调用不明确
具有
[
_Ty=字节
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\vector(786):可以是“std::vector::vector(std::vector&&)”
具有
[
_Ty=字节
]
C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\vector(693):或“std::vector::vector(unsigned)\uuuu int64”
具有
[
_Ty=字节
]
尝试匹配参数列表时“(boost::assign_detail::generic_list)”
具有
[
T=int
]
... (还有几十行)
有什么办法解决这个错误吗?我没有VC11,所以只是随便猜测一下。。。VC11可能会混淆,因为您的整数可以转换为
BYTE
,因此将使用move构造函数,或者转换为size\t
,因此将使用std::vector(size\t)
构造函数
请尝试自己转换为字节
以避免隐式转换:
vector<vector<BYTE>> data = assign::list_of (assign::list_of (static_cast<BYTE>(0x06))(static_cast<BYTE>(0x02)));
vector data=assign::list_of(assign::list_of(static_cast(0x06))(static_cast(0x02));
我认为问题不在于嵌入,而在于使用列表创建临时值。这应该是可行的:
vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
vector temp=assign::list_of(0x06)(0x02);
向量数据=分配::列表(临时);
您需要帮助boost::assign::list\u使用一些模板参数:
// C2668:
std::vector<std::vector<int>> foo1 =
boost::assign::list_of(boost::assign::list_of(0)(1));
// no C2668:
std::vector<std::vector<int>> foo2 =
boost::assign::list_of<std::vector<int>>(boost::assign::list_of(0)(1));
//C2668:
标准::向量foo1=
boost::assign::list_of(boost::assign::list_of(0)(1));
//编号C2668:
标准::向量foo2=
boost::assign::list_of(boost::assign::list_of(0)(1));
请列出编译器中可能的匹配项output@AndyT:我添加了更多编译器的输出。虽然没有太大帮助,但相关:VS12应该支持初始值设定项列表。您可以在不使用Boost.Assign的情况下编写该代码。@pmr:VS12 Update 1支持初始值设定项列表,但标准库尚未调整,因此IL无法与vector一起使用。不幸的是,这没有帮助。VS12仍然表示“对重载函数的调用不明确”。
vector<BYTE> temp = assign::list_of (0x06)(0x02);
vector<vector<Byte> > data = assign::list_of(temp);
// C2668:
std::vector<std::vector<int>> foo1 =
boost::assign::list_of(boost::assign::list_of(0)(1));
// no C2668:
std::vector<std::vector<int>> foo2 =
boost::assign::list_of<std::vector<int>>(boost::assign::list_of(0)(1));