无法在不同类上编译代码调用静态功能
Unable to compile code calling static functions on different classes
让我们假设我有两个类(实际上是我的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接受此(错误的)语法。
相关文章:
- 函数从唯一代码调用正确的子类方法
- 只允许授权代码调用库中的例程
- Android 无法从本机代码调用 Java 方法 JNI
- 如何从反应原生代码调用 C 函数?
- 如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)
- 如何从C代码调用PowerShell脚本
- 从 C 代码调用C++函数时出现问题
- 从 ObjC 代码调用 .mm 类方法时编译错误
- 代码调用反向函数不会在Ubuntu 18上的G 或Clang 上编译,但神秘地在Mac OSX上使用
- 如何使用C 代码调用MATLAB自定义函数
- 该代码调用副本或移动构造函数
- 无法在不同类上编译代码调用静态功能
- 如何从可从C++代码调用的 Ada 源代码构建静态库?
- 从 CPP 代码调用 Objective-C 方法
- 如何从C++代码调用 PL/pgSQL 函数
- C++如何判断static.lib是否有效,是否可从外部代码调用
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- JavaScript:从浏览器和 Node.js 中的 JavaScript 代码调用C++库
- C#到C代码P/调用多个std:字符串声明导致堆栈损坏
- 使用 Visual Studio 从C++代码调用程序集过程