从不同的类调用模板方法
Calling Template method from different class.
我有一个重载运算符<<的模板方法。我需要在调用类中的方法时调用该运算符。但是当我尝试时,它会给我一些编译错误。
这是来自名为 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 派生的和"与'运算符<<'不匹配(操作数类型为'csv::WriterStream'和'int')"
如果我尝试从主函数调用<<运算符是可以工作的。我做错了什么?
你试试下面的定义
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;
}
相关文章:
- C++11:模板方法的模板函数调用无法编译?
- 基于枚举参数调用专用模板方法
- 调用模板参数 constexpr 方法?
- 从非模板类调用专用模板方法
- 是否可以基于类模板的参数调用类方法和全局方法
- 从部分专用模板方法调用模板非静态方法
- 模板方法在C++中相互调用
- 在子类上调用模板化静态方法时获取类的类型名
- 使用 std::async 调用模板函数的正确方法是什么?
- C++ 如何绑定和调用模板化类型方法
- 调用模板方法会导致'operator<'不匹配
- 调用模板布尔函数的最佳方法
- 从专用模板方法调用无专门化的模板方法
- 从另一个模板对象调用模板方法时出现奇怪的编译行为
- 当类型未知时调用模板方法
- 在模板类中调用模板方法
- 数据类型调用模板方法
- 从C++中的另一个模板方法调用模板方法
- 通过指向模板方法的指针调用模板方法
- 从不同的类调用模板方法