[英]Compile Time Signed Shift Operator
這是一個宏,因此我討厭它,但是它對我想要的東西是“有效的”:
#define signed_shift(val,shift) ((shift) < 0 ? (val) >> -(shift) : (val) << (shift))
它需要是編譯時間(constexpr將在C ++ 11中工作,但我陷在c ++ 98中)。
任何人都有更好的方法(助推器可以)。
template <int val, int shift>
struct signed_shift
{
static const int result = (shift < 0) ? (val >> -shift) : (val << shift);
};
int main()
{
BOOST_STATIC_ASSERT(signed_shift<4, 3>::result == 32);
BOOST_STATIC_ASSERT(signed_shift<4, 0>::result == 4);
BOOST_STATIC_ASSERT(signed_shift<4, -1>::result == 2);
}
這可以通過模板來完成(由於C ++ 03不支持靜態成員的類內初始化,所以靜態成員是類外的):
#include <iostream>
template<typename T, T val, T shift>
struct signed_shift {
static T const value;
};
template<typename T, T val, T shift>
T const signed_shift<T,val,shift>::value
= ((shift) < 0 ? val >> -shift : val << shift);
int main()
{
std::cout << signed_shift<int, 1, 3>::value << '\n';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.