簡體   English   中英

如何檢查模板參數的值?

[英]How to check the value of a template parameter?

我想根據模板參數中的值使用別名。 像這樣的東西:

If W > 32:
template<size_t W>
using int_t = My_Int<W, int64_t>;

Else:
template<size_t W>
using int_t = My_Int<W, int32_t>;

我也嘗試了 std::conditional,但沒有找到一個好的方法。我應該怎么做? 謝謝!

使用std::conditional你會有

template<size_t W>
using int_t = std::conditional_t<(W > 32), My_Int<W, int64_t>, My_Int<W, int32_t>>;

其中My_Int<W, int64_t>W > 32為真時使用,而My_Int<W, int32_t>在其為假時使用。

是的,您可以使用std::conditional ,例如

template<size_t W>
using int_t = typename std::conditional<(W > 32), My_Int<W, int64_t>, My_Int<W, int32_t>>::type;

或者從 C++14 開始:

template<size_t W>
using int_t = std::conditional_t<(W > 32), My_Int<W, int64_t>, My_Int<W, int32_t>>;

請注意,您需要為條件W > 32添加括號; 否則W將被視為唯一的模板參數,這將不起作用,因為std::conditional需要三個。

std::conditional_t解決方案的少打字版本

template <std::size_t W>
using int_t = My_Int<W, std::conditional_t<(W > 32), int64_t, int32_t>>;
template<size_t W>
using int_t = std::conditional_t<(W > 32), My_Int<W, int64_t>, My_Int<W, int32_t>>;

將適用於 C++14。

暫無
暫無

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

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