我正在尝试创建一个类模板,用于识别函数,并在其中确定函数是否为特化了
R (*)()
的类模型,但是在std::function
中,您可以声明return_type ()
,并且std::is_same<int(), int(*)()>.::value
的值为零。这个int()
语句是什么意思?int()
和int(*)()
之间有什么区别?
int()
表示没有参数的函数,返回类型为int。
int(*)()
表示一个指向没有参数的函数,返回类型为int的指针。
int(std::string::)()
表示以std::string作为参数的函数,返回类型为int。
int std::string::()
是无效的语法。
std::function
是一个通用的函数包装器,它可以包装任何可调用对象,包括函数指针、成员函数指针、函数对象等等。
int(const std::string&)
表示以const std::string&作为参数的函数,返回类型为int。
#include <iostream>
template<typename A,typename B>
struct IsSame{
enum{
value = 0};
};
template<typename A>
struct IsSame<A,A>{
enum{
value = 1
};
};
typedef int (SumType)(int,int)const;
class X{
public:
SumType sum;
};
int X::sum(int a,int b)const{
return a+b;
}
int main()
{
std::cout << IsSame< int (const std::string&,int,int)const,
decltype( &X::sum)>::value;
}
int *f()
是返回指向int
的指针的函数,因为*f()
是用于调用这样的函数并解除引用结果的内容。同样,int (*f)()
是指向返回int
的函数的指针,因为您首先会解除引用指针,然后调用函数(不要紧这第一步在语法上是可选的)。从内部向外读取声明符并考虑优先级,例如,int *a[4]
是一个数组,而不是指针。 - Arne Vogel