首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取std的地址::刷新机械手函数不等于静态const变量中先前存储的地址

取std的地址::刷新机械手函数不等于静态const变量中先前存储的地址
EN

Stack Overflow用户
提问于 2014-01-16 14:22:08
回答 1查看 81关注 0票数 2

我正在开发一个记录器类,它重载流插入操作符。我很难抓住std::flush机械手。

首先,对我所做的事情做一个简短的总结:

给定LogClass的一个对象,我想做以下工作:

代码语言:javascript
复制
LogClass logger;
logger << "Some text" << std::flush;

..。抓住std::flush机械手。

所有输入都由以下内联运算符直接发送到内部字符串流,以便以后进行日志记录(工作正常):

代码语言:javascript
复制
class LogClass
{
    // ...

    std::ostringstream m_internalStream;

    template <typename T>
    LogClass & operator<<(const T & rhs)
    {
        m_internalStream << rhs;
        return *this;
    }

    // ...
};

我正试图通过重载来捕获std::flush机械手,如下所示(这也很好):

代码语言:javascript
复制
LogClass & LogClass::operator<<(std::ostream & (*manip)(std::ostream &))
{
    std::ostream & (* const flushFunc)(std::ostream &) = std::flush;

    // Is the supplied manipulator the same as std::flush?
    if ((manip == flushFunc)) {
        flush(); // <-- member function of LogClass
    } else {
        manip(m_stream);
    }

    return *this;
}

问题显示,如果我试图使局部变量flushFunc是静态的,如下所示:

代码语言:javascript
复制
static std::ostream & (* const flushFunc)(std::ostream &) = std::flush;

在这种情况下,传入的manip指针的值不等于flushFunc

为什么会这样呢?它与std::flush函数的char模板实例化有关吗?

我正在使用MS 2010 Pro。

这个问题还显示在这个小的工作代码片段中:

代码语言:javascript
复制
#include <iostream>
#include <iomanip>

int main(int, char **)
{
    static std::ostream & (* const staticFlushPtr)(std::ostream &) = std::flush;
    std::ostream & (* const stackFlushPtr)(std::ostream &) = std::flush;

    std::cout << std::hex <<
            "staticFlushPtr: " << (void *) staticFlushPtr << "\n"
            "stackFlushPtr: " << (void *) stackFlushPtr << "\n";

    return 0;
}

..。它在我的机器上提供了这个输出:

代码语言:javascript
复制
staticFlushPtr: 013F1078
stackFlushPtr: 0FF10B30

有什么想法吗?

向你问好,雷恩·A·阿普兰

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-16 14:58:32

这看起来像是编译器中的一个明确的错误。如果涉及DLL之类的,我可以理解它,或者至少找借口,但是在一个像你的main这样的小例子中.(g++说得对。)

我所能建议的就是在输出中插入一个过滤流,它捕获对sync的调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21164360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档