У меня есть класс для комплексных чисел :
template<typename T>
struct Complex{
T r;
T i;
};
Я решил добавить функцию, аналогичную std::get
:
template<int X, typename T>
T get(const Complex<T> &a){
switch(X){
case 0: return a.r;
case 1: return a.i;
}
}
Это работает нормально. Также я знаю, что компилятор может оптимизировать его.
Тогда я решил переписать это по-другому:
template<int X,typename T>
T get(const Complex<T> &a);
template<typename T>
constexpr T get<0, T>(const Complex<T> &a){
return a.r;
}
template<typename T>
constexpr T get<1, T>(const Complex<T> &a){
return a.i;
}
Однако это не компилируется, и мне любопытно, насколько правильной будет реализация?
Я пытался проверить, как создается std::get
, но я не смог найти ничего, что было бы "читабельным".