无法在不同类上编译代码调用静态功能

Unable to compile code calling static functions on different classes

本文关键字:代码 调用 静态 功能 编译 同类      更新时间:2023-10-16

让我们假设我有两个类(实际上是我的MCVE中只有2个),定义了两个静态函数,具有完全相同的名称:

class A
{
public:
    static void doSomething() {};
    static void doSomethingElse() {};
};
class B
{
public:
    static void doSomething() {};
    static void doSomethingElse() {};
};

我想为所有可用类调用其中一个功能。因此,我创建了一个辅助功能:

template<class Helper> static void ApplyToAllTypes( Helper& helper )
{
    helper.apply<A>();
    helper.apply<B>();
}

然后,我这样做是在所有类上调用doSomething

class doSomethingHelper
{
public:
    template<class T> static void apply()
    {
        T::doSomething();
    }
};
void doSomethingToAll()
{
    doSomethingHelper helper;
    ApplyToAllTypes<doSomethingHelper>( helper );
}

这是在所有类上调用doSomethingElse

class doSomethingElseHelper
{
public:
    template<class T> static void apply()
    {
        T::doSomethingElse();
    }
};
void doSomethingElseToAll()
{
    doSomethingElseHelper helper;
    ApplyToAllTypes<doSomethingElseHelper>( helper );
}

使用MSVC编译时,它可以正常工作,但是当我尝试使用G 编译时,它会抱怨:

In static member function 'static void ApplyToAllTypes()':
 error: expected '(' before '>' token
         helper.apply<A>();

真的无效吗?应该以任何方式固定Sytax,还是需要找到替代方案(然后提出的替代方案将不胜感激)?

您必须写

helper.template apply<A>();

Visual Studio接受此(错误的)语法。