Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于其他模板参数类型的默认模板参数_C++_Templates_Template Meta Programming - Fatal编程技术网

C++ 基于其他模板参数类型的默认模板参数

C++ 基于其他模板参数类型的默认模板参数,c++,templates,template-meta-programming,C++,Templates,Template Meta Programming,我有一个模板函数,如下所示: template<typename T> std::vector<RT> myFunc(std::vector<T> inVec){ ... std::vector<RT> outVec; return outVec 但这并没有编译,给了我以下错误: error: expected '>' before '?' token template<typename T, typename

我有一个模板函数,如下所示:

template<typename 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++代码吗?< /P>

这不是合法的C++代码吗?< /P> 是的,这不是有效的语法

你可以用

模板
std::vector myFunc(std::vector inVec){
std::矢量输出向量;
返回outVec;
}
也可以直接定义返回类型trait

template <typename T>
struct rt {
    using type = std::complex<T>;
};

template <typename T>
struct rt<std::complex<T>> {
    using type = std::complex<T>;
};

template <typename T>
using rt_t = typename rt<T>::type;

template<typename T, typename RT = rt_t<T>>
std::vector<RT> myFunc(std::vector<T> inVec){
    std::vector<RT> outVec;
    return outVec;
}
模板
结构rt{
使用type=std::complex;
};
模板
结构rt{
使用type=std::complex;
};
模板
使用rt_t=typename rt::type;
模板
std::vector myFunc(std::vector inVec){
std::矢量输出向量;
返回outVec;
}

Awesome,感谢您的快速回复和替代解决方案。
template<typename T, typename RT = std::conditional_t<is_complex<T>::value, T, std::complex<T>>>
std::vector<RT> myFunc(std::vector<T> inVec){
    std::vector<RT> outVec;
    return outVec;
}
template <typename T>
struct rt {
    using type = std::complex<T>;
};

template <typename T>
struct rt<std::complex<T>> {
    using type = std::complex<T>;
};

template <typename T>
using rt_t = typename rt<T>::type;

template<typename T, typename RT = rt_t<T>>
std::vector<RT> myFunc(std::vector<T> inVec){
    std::vector<RT> outVec;
    return outVec;
}