c++11 - std::function,模板参数 T(X)

标签 c++11 std-function

我想知道是否有人可以解释一下,给定类型 TXstd::function 如何采用 T (X) 作为模板参数。

int(double) 看起来像通常从 doubleint 的转换,那么 std::function 又如何呢? code> 将其解析为不同的类型? 我进行了搜索,但没有找到任何专门解决这个问题的内容。谢谢!

最佳答案

它可以使用部分模板特化。看看这个:

template <typename T>
class Func;

template <typename R, typename... Args>
class Func<R(Args...)>
{
public:
    Func(R(*fptr)(Args...)) {/*do something with fptr*/}
};

此类采用单个模板参数。但除非它匹配 R(Args...) (即返回 R 并接受零个或多个参数的函数类型),否则不会有该类的定义。

int main() { Func<int> f; }
// error: aggregate 'Func<int> f' has incomplete type and cannot be defined

.

int func(double a) { return a+2; }
int main() { Func<int(double)> f = func; }
// ok

该特化现在可以在 RArgs 上运行来发挥其魔力。

请注意,int(double) 是一种函数类型。由于您无法创建原始函数对象,因此您通常不会在模板世界之外看到此语法。如果 Tint(double),则 T* 是一个函数指针,就像 int(*)(double) 一样>.

关于c++11 - std::function,模板参数 T(X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20145837/

相关文章:

c++ - 对成员函数使用 std::function

c++ - std::function 可以用来存储带有可变参数的函数吗

c++ - 如何使模板函数成为另一个模板函数的参数?

c++ - 为什么 std::function 不参与重载决策?

c++ - std::function 可以用来存储带有可变参数的函数吗

c++ - 从运算符 T &() 中推导出 const

c++ - 为什么 sizeof(!0) 打印 1 而不是 4?

c++ - vector<shared_ptr<T>> 和 vector<shared_ptr<const T>> 之间的高效转换

c++ - 是否可以保存带有参数的函数指针供以后使用?

c++ - 错误:使用 getline 时 basic_istream<char> 变为非标量类型 cxx11::string