Hel*_*irr 2 c++ templates constructor typename
我有一个名为ScalarClamped的类模板.此类的实例具有用户确定的值范围,并且每当分配给它的值超出其范围时,该值将被限制在用户确定的值范围内,因此名称为"ScalarClamped":
ScalarClamped<float> scalar__(75, 0, 100); // Parameters: current value (75), minimum allowed value (0), maximum allowed value(100).
scalar__ += 50;
std::cout << scalar__.value() << std::endl; // Output: 100.
scalar -= 150;
std::cout << scalar__.value() << std::endl; // Output: 0.
Run Code Online (Sandbox Code Playgroud)
在实现成员函数时operator+
,我遇到了一个问题.这是operator+
一个重载的实现:
template<typename T>
ScalarClamped<T> ScalarClamped<T>::operator+(ScalarClamped const& scalar_clamped_){
return ScalarClamped<T>::ScalarClamped<T&&, T const&, T const&>(_m_tValue + scalar_clamped_._m_tValue, _m_tValueMin, _m_tValueMax);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试调用模板构造函数.这是它的实现(正在进行中,可能还包含错误):
template<typename T>
template<typename TypeValue, typename TypeMin, typename TypeMax>
ScalarClamped<T>::ScalarClamped(TypeValue value_, TypeMin min_, TypeMax max_):
// Initialization list:
_m_tValue((std::is_lvalue_reference<TypeValue>::value) ? value_ : std::move(value_)),
_m_tValueMax((std::is_lvalue_reference<TypeMax>::value) ? max_ : std::move(max_)),
_m_tValueMin((std::is_lvalue_reference<TypeMin>::value) ? min_ : std::move(min_))
// Function body:
{
Algorithm::clamp<T&, T const&, T const&>(_m_tValue, _m_tValueMin, _m_tValueMax);
}
Run Code Online (Sandbox Code Playgroud)
对我来说主要的问题是我无法正确调用此构造函数模板.我收到以下错误消息(缩写):
... error: dependent-name 'ScalarClamped<T>::ScalarClamped<T&&, const T&, const T&>' is parsed as a non-type, but instantiation yields a type|
Run Code Online (Sandbox Code Playgroud)
显然我试图以错误的方式调用它.如何适当地调用我的构造函数模板?
无法为构造函数模板提供显式模板参数.
必须推断出类型:
template<typename T>
template<typename TypeValue, typename TypeMin, typename TypeMax>
ScalarClamped<T>::ScalarClamped(TypeValue&& value_, TypeMin&& min_, TypeMax&& max_):
// Initialization list:
_m_tValue(std::forward<TypeValue>(value_)),
_m_tValueMax(std::forward<TypeMax>(max_)),
_m_tValueMin(std::forward<TypeMin>(min_))
// Function body:
{
Algorithm::clamp<TypeValue, TypeMin, TypeMax>(_m_tValue, _m_tValueMin, _m_tValueMax);
}
template<typename T>
ScalarClamped<T>
ScalarClamped<T>::operator+(ScalarClamped const& scalar_clamped_) const
{
return ScalarClamped<T>::ScalarClamped(
_m_tValue + scalar_clamped_._m_tValue,
_m_tValueMin,
_m_tValueMax);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
377 次 |
最近记录: |