相关疑难解决方法(0)

MethodImplOptions.InternalCall有什么意义?

BCL中的许多方法都标有 [MethodImpl(MethodImplOptions.InternalCall)]属性.这表明 "方法是在公共语言运行时本身内实现的".

以这种方式设计框架的重点是指定了运行时将被强制实现的显式CIL指令?最终,该属性正在为运行时创建合同义务,但在某种程度上,我觉得这种方式令人困惑,而且不是很明显.

例如,Math.Pow本来可以用这种方式编写(请原谅我非正式的C#+ IL和IL本身,如果它不好的话;这只是一个解释我的观点的样本):

public static double Pow(double x, double y)
{
    ldarg.0
    ldarg.1
    pow // Dedicated CIL instruction
    ret
}
Run Code Online (Sandbox Code Playgroud)

而不是当前的方式:

[MethodImpl(MethodImplOptions.InternalCall)]
public static double Pow(double x, double y);
Run Code Online (Sandbox Code Playgroud)

为什么MethodImplOptions.InternalCall存在?

.net clr cil framework-design

30
推荐指数
2
解决办法
9342
查看次数

Unity 的 Object.FindObjectOfType<T>() 如何工作?

为了创建一个受 Unity3d 启发的游戏引擎,我想将这个关于Unity 的 GetComponent如何工作的问题扩展到 Unity 的FindObjectsOfType<T>()工作方式。

期望返回所有指向<T>场景中存在的对象的指针。

我知道 Unity 在 C++ 中实现它,但是如何实现?对象可以是 Unity 中的任何东西,并且 Unity 的解决方案可以容忍继承。

统一描述说,它是缓慢的,但为什么呢?我可以想象它可能是使用动态转换的数组搜索。我正在考虑使用 实现此功能unordered_multimap,但这会使查找基类的用例变得更加困难。

让开发人员在其实现上调用宏对我来说是不正确的。用户必须可以无障碍地自由编码。

另一个问题是:考虑到这一点,智能指针的所有者是谁:

  • 对象必须返回所描述的查找操作。
  • GameObject也有自己的实现,GetComponents<T>()其中 Component 也是一个对象。

c++ components unity-game-engine

5
推荐指数
0
解决办法
914
查看次数

当对具有多个 T 类型组件的 GameObject 调用 GetComponent&lt;T&gt; 时,Unity 如何决定返回哪个组件?

如果我有一个附加了GameObject多个Component相同类型的类(HingeJoint为了示例目的,我们将其称为此类型),HingeJoint如果我GetComponent<HingeJoint>()在我的函数上调用该函数,我将获得哪个组件GameObject调用该函数,我将获得哪个组件?

根据我的研究,这个答案声称 Unity 将简单地返回 s 数组中的第一个匹配项Component- 然而,这个答案只是基于回答者自己的游戏引擎设计的有根据的猜测,该设计致力于模仿 Unity,而不是权威来源Unity 实际做了什么。

c# unity-game-engine gameobject

4
推荐指数
2
解决办法
3704
查看次数

非静态模板成员:可能吗?

是否可以在类中创建非静态模板字段?
如果没有,如何解决?

应根据需要在编译时创建此类字段.

我有很多的B-class一样B1,B2,B3.
(在实际情况中,他们有更有意义的名字.)

我想创建一个类D非静态模板函数add<BX>()是必须counter++每次我称呼它,每一个人的时间BX,对于D的特定情况下
(在现实情况下,它确实有些事情更复杂.)

这是一个实现它的工作演示.
可悲的是,我现在有硬编码每一个BX,一个接一个(B1,B2,B3内部)D: -

class B1{};class B2{};class B3{};
class Counter{
    public: int counter=0;
};
template<class BX>class Tag{};
class D{
    Counter countB1;
    Counter countB2;
    Counter countB3;
    public: template<class BX> void add(){  
        add_(Tag<BX>());
    }
    private:
    void add_(Tag<B1>){ countB1.counter++;}
    void add_(Tag<B2>){ countB2.counter++;}
    void add_(Tag<B3>){ countB3.counter++;}
    public: …
Run Code Online (Sandbox Code Playgroud)

c++ templates non-static c++14 template-variables

3
推荐指数
1
解决办法
603
查看次数