有沒有辦法根據引數更改模板結構中包含的資料成員?例如:
template<int Asize> struct intxA
{
#if (Asize <= 8)
int8 num = 0;
#elif (Asize <= 16)
int16 x = 1;
#endif
};
在實施中:
intxA<3> struct8;
intxA<11> struct16;
我已經嘗試了上面的代碼,但是,無論 Asize 的值如何,資料成員“num”始終存在。有沒有辦法在 C 中做到這一點而無需手動執行?
uj5u.com熱心網友回復:
與std::conditional:
template<int Asize> struct intxA
{
std::conditional_t<(Asize <= 8), int8, int16> m = Asize <= 8 ? 0 : 1;
};
但是如果你想給不同的名字,你必須做專業化
uj5u.com熱心網友回復:
是的,您可以通過部分專業化來做到這一點。
template<int Asize, typename = void> struct intxA
{
};
template <int Asize>
struct intxA<Asize, std::enable_if_t<Asize <= 8>>
{
int8 num = 0;
};
template <int Asize>
struct intxA<Asize, std::enable_if_t<(Asize > 8 && Asize <= 16)>>
{
int16 x = 1;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312605.html
上一篇:帶陣列的多載賦值運算子
