考虑到 C++ 模板 mixin 结构,我如何编写一个带有特定组件的 mixin 的函数?在这个例子中,我如何将 withAandB
赋予 worksWithA()
?
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>>
与 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/