我有一個帶有多個模板引數的類;讓我們說它看起來像這樣:
template <class T, class B>
struct Vector2 : B
{
Vector2() noexcept;
constexpr explicit Vector2(T a) noexcept;
}
模板引數 B 始終取決于 T。例如,如果 T 是floatB 將是XMFLOAT2,如果 T 是intB 將是XMINT2。為此,我創建了一個模板專業化:
template class Vector2<float, XMFLOAT2>;
template class Vector2<int32_t, XMINT2>;
template class Vector2<uint32_t, XMUINT2>;
問題是因為 B 總是依賴于 T,所以我想呼叫Vector<float>例如,運算式應該擴展為Vector<float, XMFLOAT2>.
我想過做一個 typealias,但是,我不確定如何實作這一點,因為它需要再次專門化。
template<class T> using Vector2 = Vector2<T, ??>;
這真的沒有意義...
如何僅使用一個引數并推導其他引數來呼叫具有多個模板引數的類?或者有不同的方法嗎?
uj5u.com熱心網友回復:
您可以創建助手特征:
template <typename T>
struct vector_base_class;
template <> struct vector_base_class<float> { using type = XMFLOAT2; };
template <> struct vector_base_class<int32_t> { using type = XMINT2; };
template <> struct vector_base_class<uint32_t> { using type = XMUINT2; };
template <class T>
struct Vector2 : typename vector_base_class<T>::type
{
Vector2() noexcept;
constexpr explicit Vector2(T a) noexcept;
};
uj5u.com熱心網友回復:
正如評論中提到的,您可能正在尋找一個特征:
template <typename T>
struct xm_from_T;
template <class T, class B = typename xm_from_T<T>::type>
struct Vector2 : B
{
Vector2() noexcept;
constexpr explicit Vector2(T a) noexcept;
};
然后特化這個特質:
template <> struct xm_from_T<float> { using type = XMFLOAT2; };
template <> struct xm_from_T<int32_t> { using type = XMINT2; };
template <> struct xm_from_T<uint32_t> { using type = XMUINT2; };
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/350158.html
上一篇:A100tensorflowgpu錯誤:“呼叫cuInit失敗:CUDA_ERROR_NOT_INITIALIZED:初始化錯誤”
