模板函数参数为' const T'

时间:2016-01-16 12:14:48

标签: c++ templates const

我获得了模板函数,它是类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成员函数头中的第二个%存在的原因,那就太棒了。

1 个答案:

答案 0 :(得分:0)

完全不同的上下文中询问了这个问题。你在这里const很重要。否则,使用const模板参数类型的字段是不合法的。