c++ 模板函数基于第一类型查找第二类型

afdcj2ne  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(111)

在下面的代码中,调用者需要为函数模板提供两个类型。这可以很好地工作,但是类型'RT'和'Type'之间存在相关性。如果RT是“海事”,那么类型总是“NM”。所以我认为“类型”有点多余,也许可以删除它?我如何才能做到这一点?

template<typename RT, typename Type>
RT make_obj(Object obj)
{
  return RT(
    obj.value1(),
    make_another_obj<Type>(obj.value2()));
}
qyswt5oh

qyswt5oh1#

一个简单的例子如果RT为“海运”,则类型始终为“NM”
如果存在一对一的关系,那么你可以使用trait并删除多余的参数:

template <typename RT> struct Type_from_RT;
template <> struct Type_from_RT<Maritime> { using type = NM; };
// more specializations for other RTs ...

// for convenience:
template <typename RT> using Type_from_RT_t = Type_from_RT<RT>::type;

template<typename RT>
RT make_obj(Object obj)
{
  return RT(
    obj.value1(),
    make_another_obj<Type_from_RT_t<RT>>(obj.value2()));
}

或者,RT类型可以直接提供type成员别名。

相关问题