[英]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.