[英]C++14 casting to return type of member function - terse version
请认为这是我要做的最简单的工作示例,以显示我的疑问:
#include <iostream>
#include <stdint.h>
#include <typeinfo>
using DefaultType = uint32_t;
class point
{
public:
DefaultType x( ) const { return DefaultType( 0 ); }
DefaultType y( ) const { return DefaultType( 0 ); }
};
int main( )
{
long cast_me = 0xaaaaaaaa;
auto casted = static_cast< std::result_of< decltype( &point::x )( point ) >::type >( cast_me );
std::cout << "cast_me (" << typeid( cast_me ).name( )
<< ") has been casted (" << typeid( casted ).name( ) << ")" << std::endl;
}
关键是,在给定的时刻,我需要将一个自变量(在示例中为cast_me
)转换为与给定成员函数的返回类型相匹配的另一种类型(在示例中为point::x()
)。
这行:
static_cast< std::result_of< decltype( &point::x )( point ) >::type >( cast_me )
效果很好,我的示例程序给了我:
cast_me (l) has been casted (j)
唯一的问题是,这太繁琐了,以至于使某些事情变得很容易变得难以辨认。
在不影响性能或引发诠释学讨论的情况下,这是获得相同结果的最好,最简洁的方法吗?
提前致谢!
您可以像这样完全避免result_of
:
static_cast< decltype(point{}.x()) >( cast_me )
请注意,如果不能保证point
是DefaultConstructible
,则应使用std::declval
,如下所示:
static_cast< decltype(std::declval<point>().x()) >( cast_me )
Vittorio的解决方案当然是正确的,而且更加简洁,但是坦率地说,这是为typedef所做的事情:
class point
{
public:
using ReturnType = DefaultType;
ReturnType x( ) const { return ReturnType( 0 ); }
ReturnType y( ) const { return ReturnType( 0 ); }
};
auto casted = static_cast<point::ReturnType>( cast_me );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.