클래스 템플릿에 ScalarClamped가 있습니다. 이 클래스의 인스턴스는 사용자가 지정한 값 범위를 가지며 할당 된 값이 범위를 벗어날 때마다 값이 사용자 정의 값 범위, 즉 "ScalarClamped"에 클램핑됩니다.C++ - 명시 적으로 템플릿 클래스 내에서 생성자 템플릿 호출?
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.
회원 기능 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);
}
: 여기에 하나 과부하 operator+
의 구현입니다. 여기가 (물론 버그를 포함 할 수 있습니다 진행중인 작업) 구현의의 :
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);
}
나를 위해 주요 문제는 내가 제대로이 생성자 템플릿을 호출 할 수 없습니다 해요 있다는 것입니다.
... error: dependent-name 'ScalarClamped<T>::ScalarClamped<T&&, const T&, const T&>' is parsed as a non-type, but instantiation yields a type|
은 분명히 내가 길을 잘못 호출하려고 해요 : 나는 다음과 같은 오류 메시지 (
단축)을 얻는다. 내 생성자 템플릿을 적절하게 호출하는 방법?
명 정적 생성 방법을 사용하십시오 템플릿가 을 ScalarClamped * ScalarClamped : (...) 만들기; 그런 다음 ScalarClamped :: Create (...); 유형을 지정합니다. –
JRG