替换了一些模板参数的模板的模板别名可以通过以下方式实现:
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);
}
但是有可能通过别名来实现吗?我已经尝试了多种变体,如果他们编译,他们不会工作。如果可能的话,谢谢你的回答。如果我已经使用的方法没问题,请不要不必要地评论,因为无论答案如何,我都会坚持下去。
答案 0 :(得分:0)
但有可能通过别名来实现吗?
不,据我所知。
你怎么称呼“别名”是模板变量,从C ++ 14开始提供。 并且模板变量不能是类/结构中的静态方法。
因此,如果NextTo()
可以写为模板静态方法,我想你可以编写几个模板静态别名(方法指针)。
如果NextTo()
必须是非静态模板方法,我认为你提出的问题是不可能的。