簡體   English   中英

C ++-具有類函數引用的模板無法在Android上編譯

[英]C++ - Template with class function reference doesn’t compile on Android

我目前正在嘗試獲取一種特殊的模板來工作。 這是一個非常簡單的示例,可以准確顯示出問題所在。 這是模板:

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);
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM