我刚刚测试了以下代码,我发现std::is_function
不接受成员函数的类型。(我不知道这是不是真的为其他编译器,我使用MVC++ 2012年11月CTP)如何专注于模板类中的成员函数类型?
class Ac {
public:
float af(int) {}
};
int main() {
std::cout << std::is_function<decltype(Ac::af)>::value << '\n'; //output is 0
}
所以我想实现它:
template<typename T>
struct is_member_function : std::false_type {};
template<typename T, typename R, typename... Args>
struct is_member_function<R (T::) (Args...)> : std::true_type {}; //this doesn't compile
对于一个成员函数指针类型,我们可以专门为这个签名:R (T::*)(Args...)
,但什么是一个成员函数类型相应的语法?
这有什么错['标准:: is_member_function_pointer'(http://en.cppreference.com/w/cpp/types/is_member_function_pointer) ? –
在C++中没有成员函数数据类型,只有成员函数指针。 –
'decltype(Ac :: af)'不合格 - 在编译器的上面代码输出'0'?啊,visual-studio-2012。我看到你的问题!据我所知,它是非法的,以非常静态的方式谈论非静态成员函数,而不需要通过'(blah blah blah)'调用来调用它并跟踪它,或者用一个'&'。 – Yakk