C++中能否在要求Callable的场景下传递Niebloid?
标准库函数指针与Niebloid的可调用性问题
一般来说,除非有明确允许,C++程序尝试获取标准库函数指针的行为是未指定的。这意味着在将它们作为Callable传递前需要格外谨慎,通常更好的做法是用lambda将其包裹。
更多相关内容:关于能否获取标准库函数地址的讨论
不过,C++20基于Range-v3库引入了Constrained algorithms(受限算法);其中诸如std::ranges::sort和std::ranges::transform之类的类函数实体是以Niebloid的形式引入的。
虽然原始库为算法库中的每个函数都创建了一个函子类,且每个Niebloid(如ranges::sort)只是对应函子类的命名对象,但标准并未规定它们的实现方式。
那么问题来了:将Niebloid作为Callable传递的行为(例如std::invoke(std::ranges::sort, my_vec))是否有明确规定或允许?
内容的提问来源于stack exchange,提问作者Ranoiaetep
相关产品推荐
相关产品推荐

