C++ 在Visual Studio 2017中,通过扩展每个参数包调用基类成员失败
考虑以下代码:C++ 在Visual Studio 2017中,通过扩展每个参数包调用基类成员失败,c++,visual-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
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;
}
A类
{
公众:
void GoImpl(){cout作为解决方案,请尝试
int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };
或
inttemp[]={0,(static_cast(this)->GoImpl(),0);
作为解决方案,请尝试
int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };
或
inttemp[]={0,(static_cast(this)->GoImpl(),0);
是的,这很有效。知道Visual Studio为什么需要显式this指针吗?@rezbot通常,当尝试调用类型依赖于模板参数的基方法时,必须使用this
。现在这种情况可能是个例外(我没有检查标准),但我认为这条规则是MSVC在这里感到困惑的原因。是的,这是可行的。你知道Visual Studio为什么需要显式this指针吗?@rezbot通常,当试图调用类型依赖于模板参数的基的方法时,必须使用this
。现在这种情况可能是一个例外(我没有检查标准),但我认为这条规则是MSVC在这里感到困惑的原因。