我获得了模板函数,它是类CompactWriter
中的成员函数:
template<typename T>
CompactWriter operator%(const Field<const T>& field)
{
_os << field.getName() << ": " << field.valueReference() << ", ";
return *this;
}
然后,我被问到第二个const是什么。
我知道根据这个:Is there any difference between “T” and “const T” in template parameter?应该没有区别
因此,我对为什么要问这个问题感到困惑。
一些背景,希望这可能会引发一些我可能错过的东西...... 模板类&#39;字段&#39;:
#ifndef SERIALIZATION_FIELD_H
#define SERIALIZATION_FIELD_H
#include <string>
#include <iostream>
template<typename T>
class Field
{
private:
public:
Field(const std::string& name, T& value)
: _name(name)
, _value(value)
{}
const std::string& getName() const { return _name; }
T& valueReference() const { return _value; }
private:
std::string _name;
T& _value;
};
template<typename T> const Field<T> field(const std::string& name, T& value)
{
return Field<T>(name, value);
}
#endif //SERIALIZATION_FIELD_H
操作员调用是在main.cpp
:
const std::string name = "Dan";
const int age = 35;
const double weight = 30 + sqrt(2);
CompactWriter writer(std::cout); // Initialize a writer object.
writer.open();
writer % field("Name", name)
% field("Age", age)
% field("Weight", weight);
writer.close();
return 0;
除了添加到cout writer.open()
和writer.close()
之外,功能{
和}
不执行任何操作。
如果有人可以指出我为什么运算符重载const
成员函数头中的第二个%
存在的原因,那就太棒了。
答案 0 :(得分:0)
在完全不同的上下文中询问了这个问题。你在这里const
很重要。否则,使用const
模板参数类型的字段是不合法的。