在我的Visual Studio项目中,我有以下几点,而且效果很好:
template <typename T>
void function(T type)
{
std::result_of<T()>::type myVar = 5; // This compiled fine with Visual Studio,
but with GCC it shows the following errors:
//error: dependent-name ‘std::result_of<T()>::type’ is parsed as a non-type,
//but instantiation yields a type. note: say ‘typename std::result_of<T()>::type’ if a type is meant
}
int main() {
auto lambda = []() { return float(); };
function(lambda);
return 0;
}
我只是想明白,编译器是否坚持我用“typename”作为d::result_of的前缀,因为它可能是模糊的,在d::result_of可以返回一个类,然后::类型可以是一个那个班的成员?这就是为什么它坚持要添加typename吗?如果是这样,那么为什么Visual Studio允许它?不合规吗?
另外,因为我已经读到了C 14或C 17的结果_被弃用,我想尝试使用更通用的decltype,它应该在更多的情况下工作。所以我试着:
template <typename T>
void function(T type)
{
decltype(T()) myVar = 5; // Error, use of deleted function‘main()::<lambda()>::<lambda>()’ main.cpp
}
所以我知道lambda有一个被删除的默认构造函数和复制赋值操作符,但是在这种情况下,我真的认为当把lambda传递给这个模板函数时,lambda的复制构造函数被调用,它确实有。然后,当我做Decktype(T()),我假设这将调用它的运算符()函数。我不明白为什么它说什么删除功能。
最后我尝试了:
decltype(std::declval<T()>) myVar = 5;
因为我认为Decval可以被用作创建一个你打的任何电话的虚假实例,至少这是它是如何向我解释的。这也失败与错误:
“初始化'main()类型的引用无效:”
result_of
首先,GCC编译器要求关键字typename
在std::result_of
之前,因为后者的返回值是一个类。你必须指示它使用它的类型来声明一个新变量。
关于你的评论:
另外,因为我已经读到,从C 14或C 17开始,结果_被弃用
std::result_of
在C17中被弃用(请参阅此处原因),并被新引入的std::invoke_result
所取代,因此如果您有兼容的编译器,您可以使用它。
脱模
因为std::result_of
是以dectype
的形式声明的:
template<typename _Signature>
struct result_of;
template<typename _Functor, typename... _ArgTypes>
struct result_of<F(Args...)> {
typedef decltype( std::declval<F>()(std::declval<Args>()...) ) type;
};
您可以使用类似的定义:
decltype( std::declval<T>()() ) myVar = 5;
我需要改变复选框检查状态,但useCallback重新呈现组件很多次。我不明白它是如何工作的。我读过很多关于它的材料。 重新渲染的数量:
我正在Celero git存储库中检查DoNotOptimizeAway的含义。但我还是不明白。请你用外行的话帮我理解一下好吗。尽你所能。
我对遗传的理解是相当基础的。
还不起作用。所以我放弃链接,我只是编码:
尽管有值,但我不能得到一个用户的值的和时间。 即使用户17有工作时间值,我也会在sumTW列中得到该用户的NULL值。我该怎么解决? 这就是我的查询看起来的样子: 下面是表格代码: (这个表和原来的不一样,原来的有外键。我去掉它们只是为了能够再现同样的问题,同样的问题被报告了)。
问题内容: 我对Angular中的注入感到非常困惑。我不知道在哪里使用它以及为什么。是否仅按此处所述与工厂一起使用? 这是工厂的名称。 问题答案: 这是在代码最小化后(如果选择最小化)支持依赖注入的一种方法。 声明控制器时,该函数采用参数: 压缩代码时,您的函数将如下所示: 由于AngularJS使用函数参数名称来推断DI,因此您的代码会中断,因为AngularJS不了解或。 为了解决此问题,他们