android - C++ - 具有类函数引用的模板无法在 Android 上编译

标签 android c++ ios android-ndk cocos2d-x

我目前正在尝试使用一种特殊的模板。这是一个非常小的示例,可以准确显示出了什么问题。 这是模板:

template <typename ClassT,  int (ClassT::*Func)() const>
class TEST
{
public:
    TEST(ClassT const * selfVar) : _this(selfVar) {
    }

private:
    ClassT const* _this;
    };

这段代码是我项目的Entity.h文件:

int _a;
int getA() const {
    return _a;
}

TEST<TestClass, &TestClass::getA> test = TEST<TestClass, &TestClass::getA>(this);

代码在使用 Xcode 的 iOS 上编译良好,但在 Android 上编译失败,出现以下错误。无法在构造函数中进行初始化 - 我知道这行得通,但我需要它成为 .h 文件中的单行代码。

这是错误日志:

jni/../../Classes/Entity.h:37:54: warning: extra qualification 'Entity::' on member 'getA' [-fpermissive]
 TEST<Entity, &Entity::getA> yoyo = TEST<Entity, &Entity::getA>();
                                                  ^
jni/../../Classes/Entity.h:37:62: error: expected ';' at end of member declaration
 TEST<Entity, &Entity::getA> yoyo = TEST<Entity, &Entity::getA>();
                                                          ^
jni/../../Classes/Entity.h:37:62: error: 'TEST<Entity, &Entity::getA>& Entity::getA' conflicts with a previous declaration
jni/../../Classes/Entity.h:29:9: note: previous declaration 'int Entity::getA() const'
 int getA() const {
     ^
jni/../../Classes/Entity.h:37:66: error: expected unqualified-id before '>' token
 TEST<Entity, &Entity::getA> yoyo = TEST<Entity, &Entity::getA>();
                                                              ^
jni/../../Classes/Entity.h:37:45: error: wrong number of template arguments (1, should be 2)
 TEST<Entity, &Entity::getA> yoyo = TEST<Entity, &Entity::getA>();
                                         ^

最佳答案

template <typename ClassT,  int (ClassT::*Func)() const>
class TEST
{
public:
    TEST(ClassT const * selfVar) : _this(selfVar) {
    }

private:
    ClassT const* _this;
};

struct Entity {
    int _a;
    int getA() const {
        return _a;
    }
};

class TestClass: public Entity {
    void method() {
        TEST<Entity, &Entity::getA> test(this);
    }
};

关于android - C++ - 具有类函数引用的模板无法在 Android 上编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407605/

相关文章:

c++ - Qt OpenGL - 用鼠标拖动旋转

ios - 如何循环遍历具有自定义单元格的 TableView 并从自定义单元格获取信息?

c++ - RAD Studio C++ Builder中的三角剖分单调多边形

ios - 如何快速卡住 tableView 单元格?

ios - 来自 Visual Studio 的 Xamarin.ios Today 扩展

android - 为我的 Android 应用程序验证用户身份的最佳方法是什么?

android - 如何在不将录音保存到文件的情况下启动 android mediarecorder?

java - Android MkDirs 失败

android - 有没有办法重命名桌面上的android程序快捷方式?

c++ - 最好返回 C++ 引用或 weak_ptr?