5

我的 ostream 有问题,我写了一个非常基本的宏,应该打印出它的参数。

请看下面的示例代码:

#define LOG Message(__FILE__, __LINE__,__func__)

class Message : public std::ostringstream 
{
    public:
        Message(const char *param1, int param2, const char *param3)
        {
            *this<<param3<<"("<<param1<<":"<<param2<<")";
        }
        ~Message()
        {
            *this<<endl;
            cout<< rdbuf()->str();
        }
};


int main()
{
    int integer = 1;
    string str = "XYZ";

    LOG<<integer<<"DEBUGLOG1: "<<str<<" "<<integer;
    return 0;
}

问题是如果我使用:

LOG << "LOG1: " << str << " " << integer;

输出打印 const char* "LOG1:" 的 Address* 而不是值。

但是,如果我使用:

LOG << integer << "DEBUGLOG1: " << str << " " << integer;

输出完美,打印整数值和字符值。

它看起来而不是使用ostream& operator<< (ostream& out, const char* s );

它正在使用ostream& operator<< (const void* val);

任何人都可以阐明可以做些什么来克服这种超载吗?

提前致谢

4

2 回答 2

5

问题是那Message(...)是暂时的。临时不能绑定到 的非常量引用参数operator<<

它只能与成员函数和运算符一起使用,例如ostream::operator<<(int).

奇怪的是成员运算符返回一个引用,该引用又可以与非成员运算符一起使用。

于 2012-05-24T14:52:11.313 回答
-1

预编译并查看宏正在解开的内容。使用宏很困难(而且不建议......),这是一种非常重要的调试方法,您需要知道以避免继续使用 Google 或 SO。

相信你想要g++ -E

于 2012-05-24T14:53:47.597 回答