问题标签 [static-if]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1682 浏览

static - 除了 D 之外还有其他语言吗?

我认为 Dstatic if是一个有趣的语言特性。这引发了我的问题:是否还有其他编译语言的示例,其中编译器对代码有很强的概念并且有语言工具可以访问它们?

例如,此代码提供了与reprPython 类似的内容:

我认为这很酷,因为它允许对重载所做的工作采用不同且更通用的方法,与此类功能相比,这是一种使代码更具动态性的由内而外的方式。例如,编译器知道我的类有多少个字段,但在大多数语言中,我的代码无法在编译时访问这些信息。

CAVEAT:最后一段有意见,但我只是想为我的问题提供一些动力和澄清,而不是引起争议。我只是想知道是否有任何其他编译语言具有此类功能。

0 投票
2 回答
327 浏览

terminology - D 的“静态如果”是声明性的还是程序性的?

考虑以下代码:

我最初的理解是声明的顺序(在全局范围内)在 D中并不重要。

但是,在这种情况下,static ifs 的顺序决定了程序是否编译。

因此,D 的编译时评估阶段是过程特性(如 C/C++)、声明特性还是其他?目前是什么,计划是什么(如果两者不同)?


编辑:

我才意识到,问题还不止于此。static if使用.tupleof枚举当前模块的成员并创建相同类型的问题会发生什么?

0 投票
4 回答
8785 浏览

c++ - 如果在纯 c++ 中是静态的?

简而言之,问题是:
如何static if用纯 c++ 实现 c++11 中提出的功能?

历史和原始问题:
最近我想出了一个这样的问题。我需要一个Sender具有类似接口的类

在某些情况下,我需要创建一个DoubleSender,即这个类的一个实例,它会调用它的方法两次,也就是说,当调用一个sendMessage(...)方法时,必须发送两次相同的消息。

我的解决方案:
第一种方法:
有一个isDouble成员,并在每个方法调用结束时进行检查

好吧,我不想要这个,因为实际上我最近需要双重发布,而时间关键部分的这部分代码将 98% 是被动的。

第二种方法:
继承一个类,并实现其方法,例如:DoubleSenderSender

好吧,这是可以接受的,但会占用大量令人不快的代码空间(真的很多,因为有很多不同的send..方法。

第三种方法:
想象一下我正在使用 c++11 :)。然后我可以使这个类通用并根据 tempalte 参数生成代码的必要部分,使用static if

这比以前的解决方案更短、更易于阅读,不会生成额外的代码,而且......它是 c++11,很遗憾我不能在我的工作中使用它。

所以,这就是我提出问题的地方——如何static if在 c++ 中实现模拟?
另外,我将不胜感激有关如何解决我原来的问题的任何其他建议。
提前致谢。

0 投票
1 回答
649 浏览

c++ - 使用类或函数模板更好地使用“static-if”?

我想定义用于序列化变量的接口,根据模板参数,执行序列化代码(true)或不false执行()。序列化函数本身以归档和变量类型为模板。

是部分专门化序列化功能,还是专门化内部带有静态方法的类?下面的代码是否正确?有没有更好的办法?


这是我的伪代码,我不确定它是否有效。

类方法看起来像这样:

部分特化将是(语法可能是错误的):

0 投票
3 回答
1450 浏览

c++ - 在 C++ 中伪造静态 If

我正在测试各种优化的组合,为此我需要一个静态如果,如http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Static-If-I-Had-a-Hammer中所述启用并禁用特定优化。if(const-expr) 并不总是有效,因为某些优化涉及更改数据布局,而这不能在函数范围内完成。

基本上我想要的是这样的:

(是的,在我的情况下,从数据布局中删除 b 的较小内存占用是相关的。)

目前我正在使用非常糟糕的黑客来伪造它。我正在寻找一种更好的方法来做到这一点。

档案啊

文件 bh(此文件由 Python 脚本自动生成)

文件通道

有谁知道这样做的更好方法?理论上它可以使用模板元编程来完成,起初我使用它。至少我使用它的方式很痛苦,并导致完全不可读和臃肿的代码。使用上面的 hack 可以显着提高生产力。

编辑:我有几个优化标志,它们相互作用。

0 投票
6 回答
1011 浏览

c++ - static_if 会否决模板专业化?

一些常见的模板专业化是这样的:

可以表示static_if为:

这些是直接竞争的功能吗?模板专业化可以做一些static_if不能做的事情吗?似乎static_if可以做模板专业化可以做的所有事情,甚至更多。

顺便说一句:我不太喜欢static_if这种情况,因为它可能使您在任何给定情况下都可以使用界面的哪些部分并不明显。也许模板专业化在某些情况下仍然提供更清晰的语法。

0 投票
1 回答
330 浏览

c++ - 避免在编译时错误条件下调用函数

我希望能够避免在编译时知道条件为假时调用函数。现在我使用这样的东西:

我不喜欢这种方法的一点是,params即使函数体为空,也会对其进行评估。

我想要一个解决方案,当根本不调用函数并且当条件为假时不会评估参数(这可能在第一种情况下使用空函数进行优化,但我不能假设这对每个都是真的编译器)。

这甚至可能吗?

0 投票
4 回答
3640 浏览

c - C99 预处理器中的 static_if

是否可以在 C99 中实现 static_if?

我怎样才能STATIC_IF(…)在这里正确实施?取决于COND参数或者应该传递给MACRO1or MACRO2,但是两个宏的参数看起来不同。COND是静态可测试的,例如sizeof (…) > 42.

  • #if COND然后#define STATIC_IF MACRO1……不适用于我的用例。
  • 我不能使用编译器特定的解决方案。
0 投票
4 回答
208 浏览

c++ - Is there a C++ programming technique which is an approximate equivalent of a runtime #ifdef?

For example I have a function call in some code I want to be able to enable/disable as I like.

Normally I could just use an if, but then it would check each time if the function can be ran, which I don't want. I simply want the code to never do that check.

ifdef blocks can be messy and quite dirty, they pile up and make code hard to read.

Can't I solve this with some sort of template ? I know I can make multiple lambdas to build each version of the possible function call I'd want.

Is this what a static if means ? Because in my mind, what I want to do is a self modifying code, which I don't know if it's a good idea or possible at all.

0 投票
1 回答
113 浏览

templates - C++11 类模板方法特化和可变参数模板

我正在尝试使用 GCC 和 C++11 构建以下类型的模板化方法:

然而,由于返回语句,这无法编译。如果 T 是 Block,则 return T(handle_,args...) 将失败,如果 T 是 Element 基本类型,则 return T(handle,batch_,args...) 将失败。

我尝试了不允许的部分模板专业化:

我尝试了完整的模板专业化,GCC 显然不支持可变参数模板:

那么我将如何创建一个像 create 这样的函数呢?

亲切的问候。