我想知道:例如,如果std::endl是常规函数,那为什么它缺少调用运算符(the operator())?
我知道它被设计为与insertion(<<)和extraction(>>)运算符一起使用.我试着像这样称呼它:
std::endl.();
但当然这不起作用.
我想弄清楚如何将操纵器传递std::endl给函数,然后在函数中使用传入的操纵器.我可以声明这样的函数:
void f(std::ostream&(*pManip)(std::ostream&));
我可以这样称呼它:
f(std::endl);
那一切都很好.我的问题是弄清楚如何在里面使用操纵器f.这不起作用:
void f(std::ostream&(*pManip)(std::ostream&))
{
  std::cout << (*pManip)(std::cout);            // error
}
无论编译器如何,错误消息都归结为编译器无法确定operator<<要调用的内容.我需要修复哪些内容f才能编译代码?
我正在尝试重载<< operator for template,我收到了这个错误.
我想要实现的是重载operator <<,它将提供开括号,所有标签项由","和关闭括号分别为'out'.
这是我的代码的一部分:
template <typename T>
class arry{
    T *tab;
    int n;
public:
    arry(T *t, int x) : n(x),tab(t){};
    friend std::ostream & operator << (const std::ostream & out, const arry<T> & t)
    {
        out << "(";
        for(int i=0;i<t.n;i++){
            out << t.tab[i];
            if(i < t.n-1)
                out << ", ";
        }
        out << ")";
        return out;
    }
};
最糟糕的是,我的构建日志为我提供了230条错误行,此时我有点困惑.
我正在尝试为我的stream班级实现一个操纵器.我对操纵者知之甚少,但我认为我做的一切都是正确的.代码的相关部分如下:
class stream
{
public:
    stream& operator<<(bool b) { // send bool value and return *this; }
    stream& operator<<(const char str[]) { // send string and return *this }
}; 
inline stream& endl(stream& s) 
{
    return s << "\r\n";
}
class stream stream;
int main()
{
    stream << endl;
}
我不知道我做错了什么,而不是调用endl编译器调用stream::operator<<(bool).任何的想法?
我正在尝试编写一个简单的审计类,它通过运算符 << 获取输入,并在接收到这样的自定义操纵器后编写审计:
class CAudit
{
public:
    //needs to be templated
    CAudit& operator << ( LPCSTR data ) {
        audittext << data;
        return *this;
    }
    //attempted manipulator
    static CAudit& write(CAudit& audit) { 
        //write contents of audittext to audit and clear it
        return audit; 
    }
private:
    std::stringstream audittext;
};
//to be used like
CAudit audit;
audit << "Data " << data << " received at " << time << CAudit::write;
我认识到代码中的重载运算符不返回流对象,但想知道是否仍然可以使用类似语法的操纵器。目前,编译器将 '<<' 视为二元右移运算符。
感谢您的任何意见,帕特里克
我正在尝试在我的日志记录类中实现自己的流操纵器.它基本上是改变旗帜状态的终点操纵器.但是,当我尝试使用它时,我会得到:
ftypes.cpp:57: error: no match for ‘operator<<’ in ‘log->Log::debug() << log->Log::endl’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:67: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:78: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:90: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
...
码:
class Log {
public:
  ...
  std::ostream& debug() { return log(logDEBUG); }  
  std::ostream& endl(std::ostream& out);           // manipulator
  ...
private:
  ... …我在 C++ 中尝试了 noskipws 操纵器,并编写了以下代码。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
    string first, middle, last;
    istringstream("G B Shaw") >> first >> middle >> last;
    cout << "Default behavior: First Name = " << first << ", Middle Name = " << middle << ", Last Name = " << last << '\n';
    istringstream("G B Shaw") >> noskipws >> first >> middle >> last;
    cout << "noskipws behavior: First Name = " << first << …我有一个显示某些东西的功能,其中字符定位可以不同。函数看起来像这样:
void display(std::ostream & stream, std::ios_base & positioning);
但是,当我尝试像这样调用此函数时
display_header(std::cout, std::left);
我收到以下错误
error: non-const lvalue reference to type 'std::ios_base' cannot bind to a value of unrelated type 'std::ios_base &(std::ios_base &)'
我不明白为什么std::cout可以通过就好了,但std::left拒绝这样做。又有何lvalue reference to type 'std::ios_base'不同lvalue reference to type 'std::ios_base'?