【发布时间】:2019-06-07 14:44:49
【问题描述】:
我有一个模板函数如下:
template<typename T>
std::vector<RT> myFunc(std::vector<T> inVec){
...
std::vector<RT> outVec;
return outVec
我需要从T 推导出返回类型RT,如果T 是std::complex,那么RT 将与T 相同,但如果不是,则RT 将是std::complex<T>。
我尝试定义一个类型特征来检查 T 是否为 std::complex 并具有基于此的默认模板参数,如下所示:
template<typename T>
struct is_complex : std::false_type {};
template<typename T>
struct is_complex<std::complex<T>> : std::true_type {};
template<typename T, typename RT = typename is_complex<T>::value ? T : std::complex<T>>
std::vector<RT> myFunc(std::vector<T> inVec){
...
std::vector<RT> outVec;
return outVec
但这不会编译给我以下错误:
error: expected '>' before '?' token template<typename T, typename RT = typename is_complex<T>::value ? T : std::complex<T>>
这不是合法的 C++ 代码吗?
【问题讨论】:
标签: c++ templates template-meta-programming