C++11 绑定(bind)方法签名简化

标签 c++ c++11 variadic-functions

给定这段代码:

#include <iostream>
#include <functional>

template<typename T>
void f(T t1, T t2) { std::cout << t1 << " " << t2 << std::endl; }

template<typename...Ts>
void g(Ts... ts) { f(ts...); }

int main() {
    auto f = std::bind(g<int, int>, 1, 2);
    f();
    return 0;
}

有什么方法可以跳过 g 的模板类型规范吗?在std::bind(g<int, int>, 1, 2)

如果不是,是否至少可以只指定一次类型?即 std::bind(g<int>, 1, 2)

这是一个live version

最佳答案

我不确定 bind 是否可行,但你可以使用 lambda 获得相同的功能,并且不需要显式模板参数:

auto f = []{
    g(1, 2);
};

关于C++11 绑定(bind)方法签名简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674664/

相关文章:

c++ - OpenGL-颜色清晰时异常

c++ - 修复 DirectShow 上的像素纵横比 (PAR) 问题的最佳方法是什么?

c++ - 在模板化构造函数中调用构造函数时的有趣行为

c++ - qt #include <vector> 错误

python - 在 Python 中使用具有可变长度未命名参数的命名参数

国际象棋接口(interface)基类的 C++ 数组

c++ - 使用 CMake 打开链接器标志

c++ - 如何在不使用 std::async 的情况下使用 std::future?

c++ - 重载函数作为可变参数模板函数的参数

java - 为什么可变参数应该是方法签名中的最后一个?