gpt4 book ai didi

c++ - 无法编译在不同类上调用静态函数的代码

转载 作者:行者123 更新时间:2023-11-28 05:00:45 24 4
gpt4 key购买 nike

<分区>

假设我有两个类(实际上更多,但在我的 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>();

那真的无效吗?语法是否应该以任何方式修复,或者我是否需要找到替代方案(那么建议的替代方案将不胜感激)?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com