成员模板别名为另一个模板成员

时间:2018-03-26 15:24:54

标签: c++ c++14

替换了一些模板参数的模板的模板别名可以通过以下方式实现:

template <typename T, ConvertFunction<T> F>
Result<> Convert(Chain& chain, T& field)
{
// ... Some unimportant body
}

template <typename T>
constexpr Result<>(*ConvertHex)(Chain& chain, T& field) = &ConvertNextTokenTo<T, HexTo<T>>;
template <typename T>
constexpr Result<>(*ConvertDec)(Chain& chain, T& field) = &ConvertNextTokenTo<T, IntTo<T>>;

这在全球范围内是可以实现的。非常有用的功能。

但我的问题是,如何在类中实现类似的别名?

template <class M>
class FooBar
{
   Result<M> m_result;
   chain& m_chain;

   template <typename T, ConvertFunction<T> F>
   MessageFromChain<M>& NextTo(T M::* memberPtr)
   {
   // ... Some unimportant body
   }

   // What put here?
};

目前我刚刚创建了新成员:

   template <typename T>
   FooBar<M>& NextDecTo(T M::* memberPtr)
   {
      return NextTo<T, IntTo<T>>(memberPtr);
   }

   template <typename T>
   FooBar<M>& NextHexTo(T M::* memberPtr)
   {
      return NextTo<T, HexTo<T>>(memberPtr);
   }

但是有可能通过别名来实现吗?我已经尝试了多种变体,如果他们编译,他们不会工作。如果可能的话,谢谢你的回答。如果我已经使用的方法没问题,请不要不必要地评论,因为无论答案如何,我都会坚持下去。

1 个答案:

答案 0 :(得分:0)

  

但有可能通过别名来实现吗?

不,据我所知。

你怎么称呼“别名”是模板变量,从C ++ 14开始提供。 并且模板变量不能是类/结构中的静态方法。

因此,如果NextTo()可以写为模板静态方法,我想你可以编写几个模板静态别名(方法指针)。

如果NextTo()必须是非静态模板方法,我认为你提出的问题是不可能的。