- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
(这里的根本问题是我正在尝试对涉及 lambda 的复杂表达式使用 decltype
或可能基于 auto
的其他类型推导。我正在尝试寻找某种解决方法。我一直在研究 http://pfultz2.github.com/Pythy/ 的多态 lambda。如果不告诉大家一个长篇故事,我无法完全进入动机!)
我希望能够做到decltype([](int){return 3.5L};
获取 lambda 的类型,或者至少是返回类型。是的,我知道 lambda 有一个独特的类型,我不需要被提醒 decltype([](int){return 3.5L};
如果在两条不同的线上使用,将给出两种不同的类型。
如果我使用 decltype
在 lambda 上,然后我收到一条错误消息(“lambda used in unevaluated context”)。我知道这似乎是一条合理的错误消息,但令我惊讶的是 C++ 会那样握着我的手!允许这样做会很有用,特别是访问 lambda 的返回类型。此错误仅仅是由于过分热心的错误消息造成的,还是确实有充分的理由无法完成?
像这样的表达式在成员函数中起作用:
template<typename T>
struct X {
void foo() {
static auto l = [](int){return 3.5;};
}
};
但我不允许这样做:
template<typename T>
struct X {
static auto var = [](int){return 3.5;}; // will also fail if I use constexpr here
};
x.cpp:8:47: error: expression ‘#‘lambda_expr’ not supported by
dump_expr#<expression error>’ is not a constant-expression
x.cpp:8:47: error: unable to deduce ‘const auto’ from ‘<expression error>’
这激发了我尝试在函数中使用静态变量以便对 lambda 进行类型推断的想法。
如果 X 不是模板,这似乎工作得更好一些。但我需要 X 作为模板——特别是,lambda 的参数将采用模板参数的类型。
请记住,我只需要 lambda 的类型,并且只对返回类型感到满意。令人沮丧的是,编译器愿意并且能够在这两种情况下进行类型推断和静态初始化,但它似乎在我的道路上设置了一些任意的障碍。
我可以访问变量的类型吗 var_in_func
来自dummy_func
之外功能?
struct S {
constexpr static auto member = a_complicated_expression... // error
void dummy_func() {
static auto var_in_func = a_complicated_expression... // OK
}
typedef dummy_func :: var_in_func the_type; // I'd like this to work
};
如果 a_complicated_expression...
中有 lambda , member
的初始值设定项通常有问题.如果S
实际上是一个结构模板,然后我收到错误消息 member
没有初始化器。这就是为什么我试图找到解决这个问题的其他方法。
然而,static auto
静态方法中的变量 dummy_func
工作正常。所以这让我想到它们应该是访问该静态变量类型的好方法?
我尝试了以下但没有成功,因为 dummy_func
不是一种类型(足够公平):
typedef dummy_fun :: var_in_func the_type_of_the_static_variable_in_the_method;
我做不到decltype( a_complicated_expression... )
因为编译器提示在未计算的上下文(declspec)中使用 lambda。
我正在使用 g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
.我不介意是否必须使用特定于 g++ 的扩展。
最佳答案
非捕获 lambda 可以转换为函数指针,并具有带有该函数指针签名的 operator()
:
template<typename C, typename R, typename... Args>
auto remove_class(R (C::*)(Args...)) -> R(*)(Args...);
template<typename C, typename R, typename... Args>
auto remove_class(R (C::*)(Args...) const) -> R(*)(Args...);
template<typename C, typename R, typename... Args>
auto remove_class(R (C::*)(Args...) volatile) -> R(*)(Args...);
template<typename C, typename R, typename... Args>
auto remove_class(R (C::*)(Args...) const volatile) -> R(*)(Args...);
template<typename T>
auto to_f_ptr(T t) -> decltype(remove_class(&T::operator())) { return t; }
您现在可以编写 auto var = to_f_ptr([](int){return 3.5;});
并且 var
的类型为 double (*) (int)
.
但是,您仍然不能将 lambda 用作类作用域 static
初始化器;见lambda as a static member .
关于c++ - 是否可以访问另一个函数中定义的自动静态变量的 *type* ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251181/
假设a是张量,那么有什么区别: 类型(a) a.类型 a.type() 我找不到区分这些的文档。 最佳答案 type 是 python 内置方法。 它将返回对象的类型。喜欢 torch.Tensor.
什么是 Type 1 的居民的例子?两者都不是 Type也不是Type的居民?在 Idris REPL 中进行探索时,我无法想出任何东西。 更准确地说,我正在寻找一些 x除了 Type产生以下结果:
我找到了一些资源,但我不确定我是否理解。 我找到的一些资源是: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb2ff3358411d1829f00
这两个函数原型(prototype)有什么区别? void apply1(double(f)(double)); void apply2(double(*f)(double)); 如果目标是将提供的函
http://play.golang.org/p/icQO_bAZNE 我正在练习使用堆进行排序,但是 prog.go:85: type bucket is not an expression
假设有一个泛型定义的方法信息对象,即一个方法信息对象,这样的方法Info.IsGenericMethodDefinition==TRUE:。也可以说它们也有一个泛型参数列表:。我可以使用以下命令获取该
在具有依赖类型的语言中,您可以使用 Type-in-Type 来简化语言并赋予它很多功能。这使得语言在逻辑上不一致,但如果您只对编程感兴趣而不对定理证明感兴趣,这可能不是问题。 在 Cayenne
根据 Nim 手册,变量类型是“静态类型”,而变量在内存中指向的实际值是“动态类型”。 它们怎么可能是不同的类型?我认为将错误的类型分配给变量将是一个错误。 最佳答案 import typetrait
假设您有以下结构和协议(protocol): struct Ticket { var items: [TicketItem] = [] } struct TicketItem { } prot
我正在处理一个 EF 问题,我发现它很难调试...以前,在我的系统中有一个表类型继承设置管理不同的用户类型 - 所有用户共有的一种根类型,以及大致基于使用该帐户的人员类型的几种不同的子类型。现在,我遇
这是我的 DBManager.swift import RealmSwift class DBManager { class func getAllDogs() -> [Dog] {
我正在尝试使用傅里叶校正图像中的曝光。这是我面临的错误 5 padded = np.log(padded + 1) #so we never have log of 0 6 g
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请考虑以下设置: protocol MyProcotol { } class MyModel: MyProcotol { } enum Result { case success(value:
好吧,我将我的 python 项目编译成一个可执行文件,它在我的电脑上运行,但我将它发送给几个 friend 进行测试,他们都遇到了这个错误。我以前从未见过这样的错误。我使用 Nuitka 来编译代码
当我尝试训练我的模型时"ValueError: Type must be a sub-type of ndarray type"出现在 line x_norm=(np.power(x,2)).sum(
我尝试在另一个类中打断、计数然后加入对象。所以我构建协议(protocol): typealias DataBreaker = () -> [Double] typealias DataJoiner
我正在使用 VS 2015 更新 3、Angular 2.1.2、Typescript 2.0.6 有人可以澄清什么是 typings 与 npm @types 以及本月很难找到的任何其他文档吗? 或
我正在考虑从 VS2010 更改为 Mono,因此我通过 MoMA 运行我的程序集,看看我在转换过程中可能遇到多少困难。在生成的报告中,我发现我不断收到此错误: bool Type.op_Equali
主要问题 不太确定这是否可能,但由于我讨厌 Typescript 并且它使我的编码变得困难,我想我会问只是为了确定。 interface ISomeInterface { handler: ()
我是一名优秀的程序员,十分优秀!