C++ 如何使用decltype获取某类类型的地址';成员函数?

C++ 如何使用decltype获取某类类型的地址';成员函数?,c++,c++11,C++,C++11,假设以下代码: class MyTest { public: void CallFoo() { } MyTest() { std::function<void()> func = &decltype(*this)::CallFoo; } }; int main() { MyTest t; } classmytest { 公众: void CallFoo() { } 我的测试() { std::fu

假设以下代码:

class MyTest
{
public:

    void CallFoo()
    {
    }

    MyTest()
    {
        std::function<void()> func = &decltype(*this)::CallFoo;
    }
};

int main()
{
    MyTest t;
}
classmytest
{
公众:
void CallFoo()
{
}
我的测试()
{
std::function func=&decltype(*this)::CallFoo;
}
};
int main()
{
MYT试验;
}
我所拥有的不会编译,但本质上我需要能够使用
decltype
来获取
*this
类型的成员函数的地址。通常您只需执行
&MyTest::CallFoo

这可能吗?如果是,正确的语法是什么?

您可以这样做

&std::remove_pointer_t<decltype(this)>::CallFoo

警告:包含宏。负责任地使用

使用以下宏使
decltype
与引用一起“合理”工作

template<class T> struct TypeOf { typedef typename std::remove_reference<T>::type type; };
#define TYPE(x) TypeOf<decltype(x)>::type
模板结构类型{typedef typename std::remove_reference::type type;};
#定义类型(x)TypeOf::TYPE

std::function func=[this]{CallFoo();}?明智的回应,但不幸的是,我有一个不可告人的动机:这是我的宏魔法,而你的案例对此不起作用。虽然这让我很痛苦,但我需要看看上面的例子是否有效。当你可以直接使用
std::remove_reference
时,为什么要使用
TypeOf
?@Barry输入太多了。既然你定义了它,你实际上就强化了你的工作。即使假设需要这样一个宏,使用
TypeOf
没有多大意义。难道你不能用模板别名代替struct
TypeOf
?你的回答的前半部分就是答案。
std::function
这件事是我的疏忽,是一个做作的例子。我试图以某种方式证明属于类构造函数主体的代码是正确的。不过我真的不是那样储存的。谢谢
auto func = [this]{ CallFoo(); };
template<class T> struct TypeOf { typedef typename std::remove_reference<T>::type type; };
#define TYPE(x) TypeOf<decltype(x)>::type