【发布时间】:2018-08-28 08:55:36
【问题描述】:
我有复数课程:
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 是如何制作的,但我找不到任何“可读”的内容。
【问题讨论】:
-
在哪种情况下
get<0>(myComplex)比myComplex.r更可取? -
比较“标准”,以后做Quaternion类,就可以使用统一接口了。也是教育原因。
-
如果
std::get与您的班级合作,那将更加标准。