有没有办法得到"当前函数"的返回类型

Uri*_*Uri 14 c++ type-inference c++11

我想编写一个模板,它将获取实例化函数的返回类型作为参数.

例如,假设我有一个Result模板类:

template<type T>
class Result {
    T _result_value;
    T& operator=( T that );
    ~Result( );
}
Run Code Online (Sandbox Code Playgroud)

这个类有几个专业.在析构函数中,我想记录返回类型,并且在operator=分配中我想检查并断言错误值.

理想情况下,我希望能够有这样的定义:

#define RESULT Result< /* decltype magic for type of current function */ >
Run Code Online (Sandbox Code Playgroud)

所以我可以用它:

HFILE MyOpenFile( ... ) {
    RESULT result;
}
Run Code Online (Sandbox Code Playgroud)

...将被推断出来Result<HFILE>.这是一个简化的例子:编写RESULT代替Result<HFILE>并不是什么大问题,但是还有其他情况下不容易获得当前函数的返回类型.

Som*_*ame 5

从函数内部这是不可能的,因为内存中没有专用对象来表示它,可以引用它来推断类型。可以通过 进行课程decltype(*this)


MSa*_*ers 5

不。C++ 中没有任何内容涉及“当前函数”。最接近的是__func__但那是一个字符串文字。因此,没有什么可以传递给decltype.

不是你需要它,用auto.