簡體   English   中英

模板參數推導問題

[英]Issue with template argument deduction

我有一個非常簡單的模板問題。 我想要一些可以處理標量和向量的數學函數。 對於參數,我希望通過復制傳遞標量,通過引用傳遞向量。 所以我最終使用了一個模板化的輔助結構。

但是當我使用我的函數時,編譯器無法自行推斷出模板參數。 我不知道我做錯了什么,或者我應該做些什么不同的,或者這種方法從一開始就注定了^^'。

下面是一個例子:

#include <type_traits>

template <typename T>
struct CopyOrConstRef
{
    using Type = std::conditional_t<
                    std::is_scalar<T>::value,
                    T,
                    const std::remove_reference_t<T>&
                 >;
};
template <typename T>
using CopyOrConstRef_t = typename CopyOrConstRef<T>::Type;

template <typename T>
T Lerp(CopyOrConstRef_t<T> _a, CopyOrConstRef_t<T> _b, const float _factor)
{
    return (_a * (1.f - _factor)) + (_b * _factor);
}

int main()
{
    Lerp(0.f, 1.f, 0.5f); // does not work :'(
    Lerp<float>(0.f, 1.f, 0.5f); // works as intended

    return 0;
}

帶有錯誤消息(在 msvc 上):

error C2672: 'Lerp': no matching overloaded function found
error C2783: 'T Lerp(CopyOrConstRef<T>::Type,CopyOrConstRef<T>::Type,const float)': could not deduce template argument for 'T'

這是行不通的,因為在Lerp的參數列表中T (即CopyOrConstRef_t<T> )的所有使用都在非推導上下文中

非推導的上下文是:

使用限定 ID 指定的類型的嵌套名稱說明符。


這是參考資料中的一個例子

如果模板參數僅在非推導上下文中使用,則模板參數不參與模板參數推導。 例如,

 template<int i, typename T> T deduce(typename A<T>::X x, // T is not deduced here T t, // but T is deduced here typename B<i>::Y y); // i is not deduced here

你的例子是一樣的,除了沒有可以推導出的參數,並且你有一個參數的別名模板(它不會改變任何東西)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM