gpt4 book ai didi

c++ - 如何将模板混合作为参数?

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

考虑到 C++ 模板混入结构,我如何编写一个函数来接收特定组件的混入?在这个例子中,我怎么给 withAandBworksWithA()

struct Base {};

template <class T>
struct HasA : T
{
int A;
};

template <class T>
struct HasB : T
{
int B;
};

void WorksWithA(HasA<Base> &p)
{
p.A++;
}

void WorksWithAandB(HasA<HasB<Base> > &p)
{
p.A++;
p.B++;
}

int _tmain(int argc, _TCHAR *argv[])
{
HasA<Base> withA;
HasA<HasB<Base> > withAandB;

WorksWithA(withA); // OK
WorksWithAandB(withAandB); // OK
WorksWithA(withAandB); // KO, no conversion available

return 0;
}

即使抛开构造问题或混合顺序(HasA<HasB<Base>> vs HasB<HasA<Base>>),我也看不出编写此函数的好方法,除了将其也设为模板。

我目前处于没有 C++11 的环境中,但我很想知道现代 C++ 是否为此提供了解决方案。

非常感谢!

最佳答案

您可以使 WorksWithA 成为一个模板函数,它接受任何用 HasA 包装的类:

template<typename T>
void WorksWithA(HasA<T> &p)
{
p.A++;
}

在这种情况下,您的代码编译没有错误。

关于c++ - 如何将模板混合作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38913714/

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