- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个编译错误:
error C3848: expression having type 'const unicode::endian_swap<T>'
would lose some const-volatile qualifiers in order to call
'unsigned long unicode::endian_swap<T>::operator ()(T &)'
此错误的描述,Here ,并没有真正解释发生了什么。
我无法在较小的示例中重现错误,但我可以展示我的类的基本布局。
template < typename T >
struct endian_swap
{
endian_swap ( void ) {}
T operator () ( T& _val ) const { return _val >> 8 | _val << 8; }
};
template < typename T >
struct test
{
endian_swap< T > _swap;
virtual void do_it ( ) const
{
unsigned short n = 0x1234;
unsigned short * _dest = &n;
*_dest++ = _swap( n ); // <-- Error is here
}
};
添加endian_swap
为成员后弹出错误。实际类派生自 std::codecvt
并安装到 std::locale
中。
有人能给出比上述网站更好的错误解释吗?
编辑:实际代码:
template < typename T, size_t N = sizeof( T ) > struct endian_swap
{
endian_swap ( void ) {};
T operator () ( const T _val ) const { return _val };
};
template < typename T > struct endian_swap< T, 2 >
{
endian_swap ( void ) {}
T operator () ( const T _val ) const { return _val >> 8 | _val << 8; }
};
template < typename T > struct endian_swap< T, 4 >
{
endian_swap ( void ) {};
T operator () ( const T _val ) const { return (_val >> 24) | ((_val & 0x00ff0000) >> 8) | ((_val & 0x0000ff00) << 8) | (_val << 24) };
};
更新:找到了!仔细看上面的模板,看看你是不是也能看出来。
最佳答案
您如何实例化模板。你的实例化 endian_swap
使用类型 T
, 你传递给它一个 unsigned
.除非
shortT
是unsigned short
, 你需要转换,转换的结果是暂时的,不能绑定(bind)到非常量引用。
您不提供 SSCCE,所以很难说。但是错误您发布的消息是指对 unsigned long unicode::endian_swap<T>::operator ()(T &);
的调用任何一个 endian_swap
为 unsigned long
实例化(其中情况下,通过 unsigned short
需要一个临时的),或者您发布的代码不是触发错误的代码。
关于c++ - 丢失 const volatile 限定词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749063/
我有一个编译错误: error C3848: expression having type 'const unicode::endian_swap' would lose s
在N3421 - Making Operator Functors greater<> , std 函数对象的新特化是: template <> struct plus { template a
我找到了这个tutorial关于正则表达式,虽然我直观地理解“贪婪”、“不情愿”和“占有”限定符的作用,但我的理解似乎存在严重漏洞。 具体来说,在以下示例中: Enter your regex: .*
我是一名优秀的程序员,十分优秀!