我具有如下模板功能:
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; ++i)
for (int j = i + 1; j < nums.length; ++j)
if (nums[i] + nums[j] == target)
return new int[] {i, j}; // we've found it! Let's return it
return new int[0]; // let's return an empty array, not {0, 0} one
}
我需要根据逻辑从template<typename T>
std::vector<RT> myFunc(std::vector<T> inVec){
...
std::vector<RT> outVec;
return outVec
推导返回类型RT
,如果T
为T
,则std::complex
将与{{ 1}},但如果不是,则RT
将是T
。
我尝试定义类型特征以检查RT
是否为std::complex<T>
并基于此设置默认模板参数,如下所示:
T
但这无法编译,但出现以下错误:
std::complex
这不是合法的C ++代码吗?
答案 0 :(得分:2)
这不是合法的C ++代码吗?
是的,这是无效的语法。
您可以使用std::conditional
。
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;
}