这是一个小例子,显示两个不同的函数类型的区别:
#include <iostream>
#include <functional>
#include <type_traits>
template <typename T>
using BinaryOperator = T(const T&, const T&);
int main() {
std::cout << std::boolalpha
<< std::is_same<
std::function<int(const int&, const int&)>,
BinaryOperator<int>
>::value
<< std::endl;
return 0;
}
这打印false
,这让我很困惑。这两种类型似乎都是等同的。他们有什么不同?
这两种类型似乎都是等同的。他们有什么不同?
嗯......不:他们是不同的类型。
如果你看一下std::function
's page in cppreference.com,你可以看到std::function
是一个具有部分特化(只定义了特化)的类,声明如下
template <class>
class function; // undefined
template <class R, class... Args>
class function<R(Args...)>;
所以你的BynaryOperator<int>
不等同于std::function<int(const int&, const int&)>
,但相当于它的模板参数。
你可以看到那是true
std::is_same<std::function<int(const int&, const int&)>,
std::function<BinaryOperator<int>>
>::value // ^^^^^^^^^^^^^^...................^