std::invoke

  • Post author:
  • Post category:
  • Post comments:0评论

std::invoke的灵活性使其成为在泛型编程中调用可调用对象的理想选择,尤其是在需要处理不同类型可调用对象的情况下。它能够自动推导返回类型和参数类型,简化了函数调用的代码。

#include <iostream>
#include <string>
#include <sstream>

// 普通函数
void print_args_as_string(const std::string& str) {
    std::cout << str << std::endl;
}

// 仿函数
struct PrintArgsAsString {
    void operator()(const std::string& str) const {
        std::cout << str << std::endl;
    }
};

// 成员函数
class Foo {
public:
    void print_args_as_string(const std::string& str) const {
        std::cout << str << std::endl;
    }
};

int main() {
    // 调用普通函数
    std::invoke(print_args_as_string, "Hello");
    // 调用仿函数
    PrintArgsAsString print_obj;
    std::invoke(print_obj, "World");
    // 调用成员函数
    const Foo foo;
    std::invoke(&Foo::print_args_as_string, foo, "Example");
    // 调用 lambda 表达式
    auto lambda = [](const std::string& str) {
        std::cout << str << std::endl;
        };
    // std::invoke(lambda, 1); 编译失败
    std::invoke(lambda, "Lambda");
    return 0;
}
文章作者: 张拓
文章链接: http://www.xssl.online/stdinvoke/
版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明来自 张拓的博客
浏览次数: 225

张拓

陕西西安蓝田张拓QQ1070410059。一生所求不过“心安”二字。 然,尘世多纷扰。

发表回复