Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 变量地址_C++_Variables_Boost_Reference_Memory Address - Fatal编程技术网

C++ 变量地址

C++ 变量地址,c++,variables,boost,reference,memory-address,C++,Variables,Boost,Reference,Memory Address,我在写统计系统。它应该使用给定的参数进行一些输出。例如: float getSunActivity() { ... } int getEarthActivity() { ... } StatisticSystem::track("sun_activity", boost::any(getSunActivity())); StatisticSystem::track("earth_activity", boost::any(getEarthActivity())); class Statist

我在写统计系统。它应该使用给定的参数进行一些输出。例如:

float getSunActivity() { ... }
int getEarthActivity() { ... }

StatisticSystem::track("sun_activity", boost::any(getSunActivity()));
StatisticSystem::track("earth_activity", boost::any(getEarthActivity()));

class StatisticSystem
{
   typedef std::map<string, const boost::any*> stats;
   stats mStatsData;

   static void track(const string &name, const boost::any &param);
   void update();
};

StaticSystem::track(const string &name, const boost::any &param)
{
   mStatsData[name] = &param;
}

StaticSystem::update()
{
    BOOST_FOREACH(stats::value_type &row, mStatsData)
    {
        string data = lexical_cast<string>(&row.second);
        cout << data << "\n";
        // Usage of 'data' value
    }
}
float getSunActivity(){…}
int getEarthActivity(){…}
统计系统::跟踪(“sun_活动”,boost::any(getSunActivity());
统计系统::跟踪(“地球活动”,boost::任何(getEarthActivity());
班级统计系统
{
typedef std::map stats;
统计数据;
静态无效轨迹(常量字符串和名称,常量boost::any¶m);
无效更新();
};
StaticSystem::track(常量字符串和名称,常量boost::any和param)
{
mStatsData[name]=¶m;
}
StaticSystem::update()
{
BOOST_FOREACH(stats::value_type&row,mStatsData)
{
字符串数据=词法转换(&row.second);

cout存储在地址中的数据由一元运算符*检索

在代码中,应该使用*row.second来获取值,而不是second的地址


不过,所有这些代码看起来都很奇怪。我认为地址操纵技术相当可疑。

我建议在这种情况下不要使用BOOST_FOREACH,因为这可能会让代码的读者更难了解隐藏的内容。您可以使用普通迭代器重写更新函数:

void StaticSystem::update()
{
    for (stats::iterator it = mStatsData.begin(); it != mStatsData.end(); ++it)
    {
        string data = lexical_cast<string>(*it->second);
        cout << data << "\n";
        // Usage of 'data' value
    }
}

不管是谁:为什么投反对票?请在我的帖子中添加一条评论,并描述缺陷,谢谢。代码存储了一个临时变量的地址,这不会给你带来任何好处。
void functionReturningNothing() { /* ... */ }