gpt4 book ai didi

C++ 简单模板递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:15 26 4
gpt4 key购买 nike

我很确定以下问题的解决方案非常标准,但我找不到合适的术语来搜索它。我有两个类(class),比方说,SomeB<A>SomeA<B> .我想创建 SomeB<A> 的实例其中 A:=SomeA<B>B:=SomeB<A> . (简化的)代码如下所示:

template<typename A>
class SomeB
{
A getA() { /* ... */ }
};

template<typename B>
class SomeA
{
B getB() { /* ... */ }
};

int main(int argc, char **argv)
{
SomeA<SomeB<SomeA<SomeB<...> > > > test;
// /\
// |
// +---- recursion
test.getB();
return 0;
}

现在,我如何告诉编译器没有像 SomeA<SomeB<SomeA<SomeB<Suprise_AnotherA<...>>>>> 中那样的“意外”? ?

最佳答案

感谢 Vittorio Romeo 为我指出模板模板参数。这个编译和工作:

template<template<typename> class A>
class SomeB
{
public:
A<SomeB> getA() { return A<SomeB>(); }
};

template<typename B>
class SomeA
{
public:
B getB() { return B(); }
};

int main(int argc, char **argv)
{
SomeB<SomeA> test;
test.getA();
return 0;
}

好奇者的元信息:SomeB 是树(节点)类,SomeA 是在树中查找节点的特定子节点的类。 SomeA 可以用许多不同的方式实现,它可以使用自己的数据结构来存储子项,即 SomeB 的实例,以进行高效过滤。

关于C++ 简单模板递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979049/

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