【问题标题】:Calling Template method from different class.从不同的类调用模板方法。
【发布时间】:2015-06-18 10:37:03
【问题描述】:

我有一个重载运算符

这是来自名为 BTreeLeave 的具体类的方法

 bool BTreeLeave::burn() {
    csv::WriterStream os("products.txt", std::ios_base::out);
    os.set_delimiter(',');
    if (os.is_open()) {

        os << 1693 << NEWLINE;
        os << 15 << 16 << 17 << 20 << NEWLINE;
        os << "s" << "i" << "f" << NEWLINE;
        os << 2 << NEWLINE;
        os << "+" << NEWLINE;
        os << "0" << NEWLINE;
    }

模板功能就是这个

template<typename T>
typename csv::WriterStream& operator << (typename csv::WriterStream& ostm, const T& val)
{    
    if(!ostm.get_after_newline())
        ostm.get_ofstream() << ostm.get_delimiter();    
    ostm.get_ofstream() << val;    
    ostm.set_after_newline(false);    
    return ostm;
}
template<>
inline csv::WriterStream& operator << (typename csv::WriterStream& ostm, const char& val)
{
    if(val==NEWLINE)
    {
        ostm.get_ofstream() << NEWLINE;
            ostm.set_after_newline(true);
    }    
    else
        ostm.get_ofstream() << val;    
    return ostm;
}

我得到的错误是 ‘csv::WriterStream’不是从‘std::basic_ostream’派生的 和 “‘operator

如果我尝试从主函数中调用

【问题讨论】:

标签: c++ templates csv methods stream


【解决方案1】:

你是否尝试以下定义

template<typename T>
typename csv::WriterStream& operator << (typename csv::WriterStream& ostm,  T val)
{    
    if(!ostm.get_after_newline())
        ostm.get_ofstream() << ostm.get_delimiter();    
    ostm.get_ofstream() << val;    
    ostm.set_after_newline(false);    
    return ostm;
}

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 2016-08-17
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2022-10-04
    • 2016-09-20
    相关资源
    最近更新 更多