我有一個型別和一個模板類
#ifdef USE_QUAD
using hybrid = __float128;
#else
using hybrid = double;
#endif
template<typename T>
struct Time {
int day;
long T dayFraction; // This is an example, I need both in here, T and long T;
};
并使事情變得復雜:嵌套類
template<typename T>
struct State {
Time<T> time;
std::vector<T> position;
}
現在我想使用的類在我的代碼hybrid和double同時,像
State<hybrid> stateH; // sometimes precision needed
State<double> stateD; // precision never needed
讓前處理器處理混合應該是什么。
但是,由于Time 類中的,代碼可以完美地編譯 if hybrid = double,但不能完全編譯 if 。hybrid = __float128long T dayFraction;
是否有解決方法來定義別名
using long __float128 = float128;
?
我有一個定義longHybrid類似的解決方法:
#ifdef USE_QUAD
using hybrid = __float128;
using longHybrid = __float128;
#else
using hybrid = double;
using longHybrid = long double;
#endif
但是轉發兩個模板引數會影響一些代碼,感覺有點多余。我很想聽聽任何想法。
uj5u.com熱心網友回復:
您實際上無法撰寫long T并期望將其解釋為long doublewhen Tis double。如果它對你有用,那是你的編譯器的一個不可移植的怪癖。
如果你想要一個型別的“常規”和“長”版本,不同double但相同的 for float128,一種方法是定義一個這樣的模板:
template <typename T> struct Longer {
using type = T;
};
template <> struct Longer<double> {
using type = long double;
};
代替long Tin struct Time,使用typename Longer<T>::type.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380310.html
下一篇:依賴于模板引數的型別定義
