gpt4 book ai didi

C#——侵入式树结构,使用CRTP

转载 作者:太空狗 更新时间:2023-10-29 23:33:34 25 4
gpt4 key购买 nike

我目前正在研究一种在 C# 中实现侵入式树结构的简单方法。由于我主要是一名 C++ 程序员,所以我立即想使用 CRTP。这是我的代码:

public class TreeNode<T> where T : TreeNode<T>
{
public void AddChild(T a_node)
{
a_node.SetParent((T)this); // This is the part I hate
}

void SetParent(T a_parent)
{
m_parent = a_parent;
}

T m_parent;
}

这行得通但是...我不明白为什么我在调用 a_node.SetParent((T)this) 时必须强制转换,因为我使用的是通用类型限制...C# cast 有成本,我不想在每个侵入式集合实现中传播这个 cast...

最佳答案

这至少是 TreeNode 类型。它可以是派生的,也可以是 TreeNode。 SetParent 需要一个 T。但是 T 可以是与它不同的类型。我们知道 this 和 T 都派生自 TreeNode 但它们可以是不同的类型。

例子:

class A : TreeNode<A> { }
new TreeNode<A>() //'this' is of type 'TreeNode<A>' but required is type 'A'

关于C#——侵入式树结构,使用CRTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com