繁体   English   中英

C ++ 14强制转换为返回成员函数的类型-简洁版

[英]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 )

现场魔盒示例


请注意,如果不能保证pointDefaultConstructible ,则应使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM