Как передать линк в функцию класса и вызвать ее? - PullRequest
0 голосов
/ 15 января 2011

Итак, у меня есть класс, как

class mySafeData
{
public:
    void Set( int i ) 
    {
        myMutex.lock();
        myData = i;
        myMutex.unlock();
    }
    void Get( int& i)
    {
        myMutex.lock();
        i = myData;
        myMutex.unlock();
    }
private:
    int myData;
    boost::mutex myMutex;

};

его экземпляр работает. Позволяет вызвать экземпляр A. Я хочу создать новый класс, который будет принимать в качестве аргумента запуска какую-то ссылку на Getter из A и сможет каким-то образом сохранить ссылку на the getter для вызова его внутри своих закрытых методов, когда это необходимо. как это сделать?

Ответы [ 3 ]

2 голосов
/ 15 января 2011

Похоже, вы хотите что-то вроде этого:

class myOtherData
{
public:
    myOtherData(mySafeData& dataSource) :
    myDataSource(&dataSource)
    {}

private:
    // note that if you take the advice in the comments,
    // you don't need this wrapper function at all,
    // it's simple just to call myDataSource.Get()
    int GetData()
    {
        int result;
        myDataSource.Get(result);

        return result;
    }

    mySafeData* myDataSource;
};

mySafeData a;
myOtherData b(a);

// b uses a as its data source (make sure it lives as long!)
1 голос
/ 15 января 2011

Что не так с указателями?Smart, Shared, Scoped ... Сейчас я буду использовать стандартные указатели.

class B
{
public:
  B(mySafeData* ptr) // constructor takes a memory pointer as parameter
  :SafeData_ptr(ptr)
  { 
     SafeData_ptr->foo(); // call public function from class A
  }

  ~B() // destructor
  {
  }

private:
  mySafeData* SafeData_ptr; // will hold the mem address of instance A when
                            // this class is initialized
};

Позже в вашем коде, когда у вас будет готов экземпляр A, вы сделаете что-то вроде этого:*

Вероятно, это не самый умный способ сделать это, но я думаю, что это иллюстрирует идею.

1 голос
/ 15 января 2011

Я не уверен, что вы подразумеваете под линком / ссылкой.Вы просите что-то большее, чем этот шаблон?

class Foo {
public:
    Foo(mySafeData& d) : data(d) {}

    int someFunction() {
        int i;
        data.get(i);
        return i;
    }
private:
    mySafeData& data;
};

...
Foo f(a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...