У меня есть шаблонная функция, как показано ниже:
template<typename T>
std::vector<RT> myFunc(std::vector<T> inVec){
...
std::vector<RT> outVec;
return outVec
Мне нужно, чтобы тип возврата RT
был выведен из T
с логикой, что если 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 ++?