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
没有多大意义。难道你不能用模板别名代替structTypeOf
?你的回答的前半部分就是答案。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