簡體   English   中英

容器的模板參數推導

[英]template parameter deduction for container

我的問題是,我不知道一種強制編譯器在不使用偽參數的情況下推導模板參數的方法。 這是一個無效的示例:

template<int I, class C, class T, std::size_t N>
inline typename std::enable_if<
  std::is_same<C, std::array<T, N> >::value,
  std::array<T, N> >::type
create_container()
{
  std::array<T, N> array;
  // I is used somewhere
  return array;
}

這是一個工作示例:

template<int I, typename T, std::size_t N>
std::array<T, N> create_container(std::array<T, N> const&) // dummy parameter helps deduction
{
  std::array<T, N> array;
  // I is used somewhere
  return array;
}

模板參數C在第一個示例中指定要實例化的容器,但是在第二個示例中,將基於啞參數選擇函數。 SFINAE或其他魔術可能嗎? 我想到了部分模板的專業化,但是功能模板是不可能的。

create_container的調用方式如下:

template <std::size_t O, typename R, typename ...A, std::size_t ...I>
inline R forward(R (*f)(A...), indices<I...>)
{
  return (*f)(create_container<I + O, A>()...);
}

您是否只是缺少類型特征以檢測C是否為std::array<T,N> 如果是這樣的話:

template< typename >
struct is_std_array : std::false_type {};

template< typename T, std::size_t N >
struct is_std_array< std::array< T, N > > : std::true_type {};

template<int I, typename C>
typename std::enable_if< is_std_array< C >::value, C >::type create_container()
{
   C container;

   // to access T and N from std::array<T,N>, use this:
   typedef typename C::value_type T;
   constexpr std::size_t N = container.size();

   // I is used somewhere
   return container;
}

暫無
暫無

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

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