【发布时间】:2021-02-24 06:23:11
【问题描述】:
在函数模板中,参数的类型是由一些 trait 类决定的,所以它们的类型可能会变得很长
template<typename A>
void func(typename Traits<A>::some_type_x x1, typename Traits<A>::some_type_x x2);
有没有办法给这些类型起别名?我目前的解决方案是在模板参数中引入另一个类型名
template<typename A, typename X = typename Traits<A>::some_type_x>
void func(X x1, X x2);
但是这些可能会让函数调用者提供一些无效的参数,所以我想知道这个问题是否有更优雅的解决方案?
【问题讨论】:
-
人们不会倾向于缩短
std::vector<int> a, std::vector<int> b对吧?但至少你仍然可以让它 int.otrait_type_t<A> x1, trait_type_t<A> x2 -
stackoverflow.com/a/19824531/5267751 中有一个 decltype 解决方案,它可能更短,也可能不会更短......
-
@user202729 是的,也许声明一些辅助类型就足够了。 decltype 解决方案仅在参数类型相同时才有效。但在我的用例中,一些参数涉及多个特征,并且它们共享一个顶级特征。