簡體   English   中英

嵌套模板類型的別名

[英]alias for nested template type

我有以下代碼:

template <template <typename, typename...> typename trait_t, typename arg_t>
struct BindFirst
{
    template <typename... arg_ts>
    using result_t = trait_t<arg_t, arg_ts...>;
};

#define BIND_FIRST(trait_t, arg_t) BindFirst<trait_t, arg_t>::template result_t

您可以使用它來綁定特征的第一個參數,如下所示:

BIND_FIRST(std::is_same, double)

結果等於:

template <typename T>
struct IsInt : std::is_same<double, T> { };

區別在於您可以內聯使用它。 例如這樣:

using result_t = find_t<type_list, BIND_FIRST(std::is_same, double)>;

這可行,但我想避免定義。 我試圖使用別名。 但是我不知道如何應用它。 有什么方法可以代替定義嗎?

您可以將模板與using一起using以創建別名模板,就像對result_t所做的一樣。

template <typename... Args>
using IsDouble = BindFirst<std::is_same, double>::template result_t<Args...>;

您也可以將Args...限制為單個T ,也不必是可變的。

編輯:如果您的目標是減少樣板,您可能想要選擇這樣的東西

template <typename T, typename U>
using IsSameAs = std::is_same<T, U>;

template <typename T>
using IsDouble = IsSameAs<double, T>;

暫無
暫無

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

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