【问题标题】:How to pass a parameter by reference to a member function of template class?如何通过引用模板类的成员函数来传递参数?
【发布时间】:2018-05-30 08:59:40
【问题描述】:

我有一个带有构造函数的模板类,它接受参数作为参考。我正在寻找一种在调用函数中传递变量的方法。

template <typename T>
class Data : public ParentClass
{
    T m_data;
public:
    Data(T & data);
    T data() const;
};

template <typename T>
Data<T>::Data(T & data) : m_data(data)
{}

template <typename T>
T Data<T>::data() const
{
    return m_data;
}

int main()
{
    Data<bool> * d = new Data<bool>(true);
    std::cout << d->data() << std::endl;
}

错误:没有构造函数“Data::Data[with T=bool]”的实例 匹配参数列表的参数类型是:(bool)

【问题讨论】:

  • T &amp; data -> const T &amp; data?
  • 没有必要将 bool 作为const&amp; 发送,您无法修改,并且 bool 比指针小
  • 感谢您的意见。但是如果不是const怎么处理呢?
  • 你的构造函数没有尝试修改传入的参数,没有理由使参数非const(并且参数“不关心”是否声明了原始值const与否)

标签: c++ templates pass-by-reference


【解决方案1】:

您不能将右值(即true)绑定到非常量左值引用(即bool&amp;)。例如你不能做bool&amp; b = true;

要解决此问题,您可以将参数类型更改为Tconst T&amp;

【讨论】:

  • @Rotem 是的,它有效。但实施也需要一些调整。我不确定它是否符合 OP 的意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多