gpt4 book ai didi

c++ - 如何在 C++ 中将 ostream operator<< 作为函数传递?

转载 作者:行者123 更新时间:2023-12-05 00:52:38 24 4
gpt4 key购买 nike

有什么方法可以通过 std::ostream operator<<作为其他函数调用中的参数?例如:


#include <iostream>

template <typename Visitor>
void print(Visitor v, int value)
{
v(value);
}

int main(void)
{

std::cout.operator<<(5); // This works

std::cout << 5; // This works

print(std::cout.operator<<, 5); // Error happens

return 0;
}

错误是:

$ g++ -g main.cpp -o main
main.cpp: In function ‘int main()’:
main.cpp:17:12: error: no matching function for call to ‘print(<unresolved overloaded function type>, int)’
5);
^
main.cpp:4:6: note: candidate: template<class Visitor> void print(Visitor, int)
void print(Visitor v, int value)
^~~~~
main.cpp:4:6: note: template argument deduction/substitution failed:
main.cpp:17:12: note: could not deduce template parameter "Visitor"

我知道在 C++ 中我们可以进行运算符重载,例如 std::ostream& operator<<(std::ostream& out, something);但这不是我的目标。假设我想使用其他打印功能或运算符(如 std::foutprintf ),所以我想要我的 print函数尽可能通用。

最佳答案

您可以改为传递 lambda。

print([](int value) { std::cout << value; }, 5);

关于c++ - 如何在 C++ 中将 ostream operator<< 作为函数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69793032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com