c++ - 在 Visual Studio 2017 中通过扩展每个参数包调用基类成员失败

标签 c++ visual-c++ visual-studio-2017

考虑以下代码:

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 中失败:

error C2352: 'A::GoImpl': illegal call of non-static member function

我还没有找到这方面的任何具体信息。这只是编译器中的错误(或未实现的功能),还是我遗漏了一些巫术?你能建议任何解决方法吗?我专门尝试在每个基类上调用一个基类函数。

最佳答案

作为解决方案,试试

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

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

关于c++ - 在 Visual Studio 2017 中通过扩展每个参数包调用基类成员失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575673/

相关文章:

c++ - 为什么我的 Visual Studio 2017 编译器无法识别 C++17 类型推导指南

c++ - OpenCV VideoCapture 支持的最大分辨率

c++ - QPixmap 的 loadFromData 函数使用了一些奇怪的缓存机制?

c++ - 如何向 CPrintDialogEx 添加属性页

c++ - C++ 中的 ISO 文件

razor - 在 Razor View 中使用 Bower 包版本号来支持 CDN

c++ - 用 C++ 学习大 O 表示法,对这是 O(n) 还是 O(n2) 感到困惑

c++ - C++ 正则表达式中的字符类无法正常工作

c++ - 如何在 C++ 中将窗口的屏幕截图作为位图对象?

visual-studio-2017 - ef核心迁移不能使用 secret 管理器