考虑以下代码:

class A
{
public:
    void GoImpl() { cout << "A"; }
};

class B
{
public:
    void GoImpl() { cout << "B"; }
};

template <class... Mixins>
class Foo : public Mixins...
{
public:
    void Go()
    {
        int temp[] = { 0, (Mixins::GoImpl(), 0)... };
    }
};

int main()
{
    Foo<A, B> foo;
    foo.Go();  // ERROR: illegal call of non-static member function

    return 0;
}

这可以在GCC或clang中正常编译,但是在Visual Studio 2017中使用以下命令失败:



我尚未找到任何具体信息。这仅仅是编译器中的错误(或未实现的功能),还是我缺少一些巫毒教?您能建议任何解决方法吗?我专门尝试在每个基类上调用基类函数。

最佳答案

作为解决方案,请尝试

    int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };

要么
    int temp[] = { 0, (static_cast<Mixins*>(this)->GoImpl(), 0)... };

09-12 06:22