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的滥用,而不仅仅是对它的使用;即使它主观上“更清晰”“在某些情况下,无论何时有固定形式的可调用,客观上都会更糟。@ildjarn
std::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; } ) );
}