问题标签 [crtp]
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.
c++ - “奇怪重复的模板模式”的实际用途
“奇怪重复的模板模式”有哪些实际用途?通常显示的“计数类”示例对我来说并不是一个令人信服的示例。
java - Java 枚举定义
我以为我非常了解 Java 泛型,但后来我在 java.lang.Enum 中遇到了以下内容:
有人可以解释如何解释这个类型参数吗?提供可以使用类似类型参数的其他示例的奖励积分。
c++ - CRTP 避免动态多态性
如何在 C++ 中使用 CRTP 来避免虚拟成员函数的开销?
c++ - 不完整类型的无效使用
我正在尝试在我的项目中使用来自子类的 typedef,我在下面的示例中隔离了我的问题。
有谁知道我要去哪里错了?
这是我得到的输出:
c++ - C++ CRTP 问题,MSVC 错误 C2039
MSVC 2008 不会编译此代码:
我得到的错误是“错误C2039:'type':不是'D'的成员”。有任何想法吗?
c++ - 我可以在这里使用奇怪重复的模板模式(C++)吗?
我有一个可以简化为这样的 C++ 应用程序:
我的应用程序对性能至关重要。集合中通常有数千个小部件。从(其中有几十个)派生的类AbstractWidget
通常不会覆盖许多虚函数。那些被覆盖的通常具有非常快的实现。
鉴于此,我觉得我可以通过一些巧妙的元编程来优化我的系统。目标是利用函数内联并避免虚函数调用,同时保持代码的可管理性。我已经研究了奇怪重复出现的模板模式(请参阅此处进行描述)。这似乎几乎可以满足我的要求,但并不完全。
有什么方法可以让 CRTP 在这里为我工作吗?或者,还有其他任何人能想到的聪明的解决方案吗?
c++ - 如何为所有派生类型部分专门化一个类模板?
std::tr1::hash
我想为基类和所有派生类部分专门化我无法更改 () 的现有模板。原因是我使用奇怪重复的模板模式来实现多态性,并且哈希函数是在 CRTP 基类中实现的。如果我只想部分专注于 CRTP 基类,那很容易,我可以写:
但是这种特化与实际的派生类不匹配,只有CRTPBase<Derived>
. 我想要的是一种为Derived
当且仅当它派生自CRTPBase<Derived>
. 我的伪代码是
...但这不起作用,因为编译器无法判断enable_if<condition, Derived>::type
是Derived
. 如果我可以更改std::tr1::hash
,我会boost::enable_if
按照文档的建议添加另一个要使用的虚拟模板参数enable_if
,但这显然不是一个很好的解决方案。有没有办法解决这个问题?我是否必须在每个或我创建的每个unordered_set
或我创建的自定义哈希模板上指定一个自定义哈希模板,或者为每个派生类unordered_map
完全专门化?hash
java - 如何在java中转换为CRTP?
我有一个非常简单的案例,我做了一些基本的通用分配:
但Enum.valueOf()有点难以调用,在我的情况下,错误是:
java.lang.Enum 中的 valueOf(java.lang.Class,java.lang.String) 不能应用于 (java.lang.Class,java.lang.String)
这是完全有道理的,因为 type 是Class<Object>
. 但是由于Enum
是 CRTP,我找不到一个好的方法来转换类型以使编译器满意。使用原始类型Enum.valueOf((Class)type, example))
是唯一的答案吗?它给了我 2 个警告,而不是只有一个。
java - java中的枚举和泛型方法
java泛型系统中的一些极端情况仍然存在问题。
我有这个方法(我只对签名感兴趣):
(想想一个接口,它的实现有时会提取一个 EnumSet 有时一个实现会提取一个 JComboBox 等。)
我想用在运行时获得的类来调用它,所以我只是这样称呼它:
我收到一条奇怪的错误消息:找到不兼容的类型:java.lang.Object required: RETURN_TYPE
消息的位置,如果就在呼叫的开始之后,在类型的“t”之前。
如果我从非通用上下文中调用它,它可以工作:
请问有人对此问题有解释和解决方案吗?
这是一个完整的文件供想要玩它的人使用:
提前致谢,
尼科
c++ - 从模板参数继承并在 C++ 中向上转换
我曾尝试在 VS2008 中使用此代码(并且可能在示例中包含了太多上下文......):
这按预期工作,即可以访问“A”成员函数并且 fooresult 返回 1。但是,当在 unittest 函数结束时删除对象时会引发异常:
System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏
如果我将 Current() 函数的返回类型更改为:
然后一切正常,单元测试以没有访问冲突结束。有人能告诉我第一个 Current() 实现有什么问题吗?谢谢,布谢。