0

wxWidgets と組み合わせて Google Mock を使って運が良かった人はいますか? 次のように、シグネチャで wxString への const 参照を取るセッターを持つクラス Foo があります。

class Foo {
public:
    Foo();
    virtual ~Foo();
    void setName(const wxString& name);
};

次に、次のように Foo をモックします。

class MockFoo : public Foo {
    MOCK_METHOD1(setName, void(const wxString& name));
};

私の他のモックは問題なく動作しますが、wxString パラメータには気に入らない点があります。コンパイルすると、次のように表示されます。

C:\gmock-1.6.0\gtest\include\gtest\internal\gtest-internal.h:890: error: conversion from `const wxUniChar' to `long long int' is ambiguous
C:\wxWidgets-2.9.0\include\wx\unichar.h:74: note: candidates are: wxUniChar::operator char() const
C:\wxWidgets-2.9.0\include\wx\unichar.h:75: note:                 wxUniChar::operator unsigned char() const
//more potential candidates from wxUniChar follow after that

要するに、wxUniChar が提供する operator() 関数は Google Mock が期待するものにマップされないため、Google Mock はどの operator() 関数を呼び出すかを判断できません。「long long int」および「testing::internal::BiggestInt」変換でこのエラーが発生します。

4

2 に答える 2

0

wxUniChar ヘッダー ファイルへの次の追加は機能しているようです。

wxUniChar(long long int c) { m_value = c; }

operator long long int() const { return (long long int)m_value; }

wxUniChar& operator=(long long int c) { m_value = c; return *this; }

bool operator op(long long int c) const { return m_value op (value_type)c; }

wxUniCharRef& operator=(long long int c) { return *this = wxUniChar(c); }

operator long long int() const { return UniChar(); }

bool operator op(long long int c) const { return UniChar() op c; }

これらをヘッダー ファイルの適切なセクションに挿入すると、コンパイル エラーはなくなりました。後で時間があれば、これが合理的な解決策のように思われる場合は、いくつかの単体テストを使用して wxWidgets のパッチに取り組みます。

于 2013-05-14T18:54:18.030 に答える