我正在编写一个用于记录的通用类
代码:
template<class Writer>
class Logger
{
public:
Logger(Writer* writer);
~Logger(void);
void operator() (char level, std::string message);
private:
Writer* writer;
};
template<class Writer>
Logger<Writer>::Logger(Writer* writer)
: writer(writer)
{
}
template<class Writer>
Logger<Writer>::~Logger(void)
{
}
template<class Writer>
void Logger<Writer>::operator ()(char level, std::string message) {
/* do something fancy with the message */
/* ... */
/* then write to output channel */
this->writer << message;
}
但是我在编译时遇到错误“无法推断模板参数”。发生错误的行是
this->writer << message;
我对C ++模板很陌生,我更倾向于来自C#-force of force ...有什么建议吗?
提前谢谢你......
答案 0 :(得分:3)
您正在使用指针作为operator <<
的左操作数:
this->writer << message;
// ^^^^^^
如果你想使用指针,你应该这样做:
*(this->writer) << message;
甚至更好(假设Logger
类必须始终与Writer
关联,以便writer
指针永远不应为null),请用引用替换指针:
template<class Writer>
class Logger
{
public:
Logger(Writer& writer);
// ^^^^^^^
// ...
private:
Writer& writer;
// ^^^^^^^
};
这将允许您使用原始版本的呼叫运算符,并写入:
this->writer << message;
现在所有这一切当然都是正确的,假设存在适当的operator <<
重载。