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.
メンバー関数を実装するときoperator+
に、問題が発生しました。operator+
for one オーバーロードの実装を次に示します。
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);
}
ご覧のとおり、テンプレート コンストラクターを呼び出そうとしています。これが実装です(進行中の作業で、バグも含まれている可能性があります):
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|
明らかに、私はそれを間違った方法で呼び出そうとしています。コンストラクター テンプレートを適切に呼び出す方法は?