考虑到 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/

10-11 20:05