【发布时间】:2017-10-26 23:16:05
【问题描述】:
我有这样的功能:
template <typename P1, typename... Ps> constexpr auto pipe(P1 &&proc1,
Ps &&...procs) -> Cont<Cont<
Proc<typename RevProc<P1>::ArgType,
typename RevProc<typename Last<Ps...>::Type>::RetType>>> {
using T = typename RevProc<P1>::ArgType;
using U = typename RevProc<P1>::RetType;
using V = typename RevProc<typename Last<Ps...>::Type>::RetType;
return [&] (Cont<Proc<T, V>> &&pass) {
pipe(move(procs)...)([&] (Proc<U, V> &&proc2) {
pipe(move(proc1), move(proc2))(move(pass));
});
};
}
您可能会发现类型声明是重复的。有没有机会给这个函数一个签名,比如:
template <typename P1, typename... Ps> constexpr auto pipe(P1 &&proc1,
Ps &&...procs) -> Cont<Cont<Proc<T, V>>>
并在某个适当的位置定义T 和V?
【问题讨论】:
-
你能直接切换到 C++14 吗?
-
其实我用的是C++14。我是新人,什么都不懂。
-
啊,太好了,那就删除尾随的返回类型吧!如果你想返回那个实际的类型(而不是稍后转换),把类型转换放到 return 语句中。
标签: c++ c++11 refactoring using type-alias