C++ _守卫、重载操作符(我想到的是范围等),但这在很大程度上是一种判断,这是100%没有意义的std::invoke用于一般代码,其中可能会给您一个函数对象、PMF、函数指针等。当您已经知道如何调用可调用函数时,std::invoke除了减慢生成时间外,没有其
C++ _守卫、重载操作符(我想到的是范围等),但这在很大程度上是一种判断,这是100%没有意义的std::invoke用于一般代码,其中可能会给您一个函数对象、PMF、函数指针等。当您已经知道如何调用可调用函数时,std::invoke除了减慢生成时间外,没有其,c++,c++11,lambda,c++14,C++,C++11,Lambda,C++14,_守卫、重载操作符(我想到的是范围等),但这在很大程度上是一种判断,这是100%没有意义的std::invoke用于一般代码,其中可能会给您一个函数对象、PMF、函数指针等。当您已经知道如何调用可调用函数时,std::invoke除了减慢生成时间外,没有其他用途。@ildjarn感谢您重复我在回答中所说的内容并进行向下表决。它没有任何作用“做完全相同的事情”,它做的更多,因此构建时间也增加了。您没有提到这一点。;-]这是对std::invoke的滥用,而不仅仅是对它的使用;即使它主观上“更清晰”
_守卫、重载操作符(我想到的是范围等),但这在很大程度上是一种判断,这是100%没有意义的
std::invoke
用于一般代码,其中可能会给您一个函数对象、PMF、函数指针等。当您已经知道如何调用可调用函数时,std::invoke
除了减慢生成时间外,没有其他用途。@ildjarn感谢您重复我在回答中所说的内容并进行向下表决。它没有任何作用“做完全相同的事情”,它做的更多,因此构建时间也增加了。您没有提到这一点。;-]这是对std::invoke的滥用,而不仅仅是对它的使用;即使它主观上“更清晰”“在某些情况下,无论何时有固定形式的可调用,客观上都会更糟。@ildjarnstd::invoke
用于强调函数调用,而不是依赖阅读代码的人可能会错过的()
-细节。仅此一项就可以节省开发人员的时间。本书对该技术进行了解释:
MyFoo::MyFoo() : SomeBase( complexstuff )
{
return;
}
MyFoo::MyFoo() : SomeBase(
[]()
{
/* blah blah do stuff with complexstuff */
return complexstuff;
} () )
{
return;
}
error: no matching function for call to 'SomeBase(<lambda()>)'
#include <iostream>
namespace detail {
enum class invoke_t{};
template<class Callable>
auto operator+(invoke_t, Callable c) -> decltype(c()) {
return c();
}
}
constexpr detail::invoke_t invoke{};
int main() {
invoke + []() {
std::cout << "called";
};
}
class MyFoo : public Base {
private:
static SomeComplexType compute_complex_stuff() {
SomeComplexType complexstuff;
/*compute the complexstuff */
return complexstuff;
};
public:
MyFoo() : Base(compute_complex_stuff()) {};
};
MyFoo::MyFoo : Base (({
SomeComplexType complexstuff;
/*compute the complexstuff */
return complexstuff;
}) {};
#include <iostream>
#include <functional>
void foo(int i)
{
std::cout << i << '\n';
}
int main()
{
foo( std::invoke( []() { return 1; } ) );
}