Boost assign list_of对双字面值不起作用

boost assign list_of does not work with double literals?

本文关键字:字面值 不起作用 of assign list Boost      更新时间:2023-10-16

我想使用boost的list_of来初始化vector<double>,但似乎矢量最终具有整数值。

我从这里的示例http://www.boost.org/doc/libs/1_55_0b1/libs/assign/doc/index.html#complicated开始,并将score_type更改为vector<double>,并添加一些浮点字面值。下面是新代码:

#include <boost/assign/list_of.hpp>
#include <boost/assign/list_inserter.hpp>
#include <boost/assert.hpp>
#include <string>
#include <vector>
#include <map>

using namespace std;
using namespace boost::assign;
int main()
{
  typedef vector<double>                   score_type;
  typedef map<string,score_type>        team_score_map;
  typedef pair<string,score_type>       score_pair;
  team_score_map group1, group2;
  //
  // method 1: using 'insert()'
  //
  insert( group1 )( "Denmark", list_of(1.1)(1) )
    ( "Germany", list_of(0)(0) );
  BOOST_ASSERT( group1.size() == 2 );
  BOOST_ASSERT( group1[ "Denmark" ][1] == 1 );
  BOOST_ASSERT( group1[ "Denmark" ][0] == 1.1 );
  //
  // method 2: using 'list_of()'
  //
  group2 = list_of< score_pair >
    ( "Norway",  list_of(1)(5.9) )
    ( "Andorra", list_of(1)(1) );
  BOOST_ASSERT( group2.size() == 2 );
  BOOST_ASSERT( group2[ "Norway" ][0] == 1 );
  BOOST_ASSERT( group2[ "Norway" ][1] == 5 );
  BOOST_ASSERT( group2[ "Norway" ][1] == 5.9 );
  return 0;
}

方法1的最后一个断言insert工作正常,但方法2的最后一个断言list_of失败。我尝试用((double)5.9)(5.9f)初始化,但无济于事。

我想现在我可以通过使用insert来解决这个问题。

想法吗?

谢谢。

(我知道c++ 11的初始化列表,但我想了解这里发生了什么)

如果不告诉list_of期望的类型,它将从第一次调用开始猜测:

list_of
    (0) // int
    (0.5) // oops, already decided int

可以指定:

list_of<double>(1)(5.9)

或者您可以确保第一次调用足以猜测:

list_of(1.0)(5.9)