Записать в файл, но перезаписать его, если он существует

Если Вы взаимодействуете через интерфейс с библиотекой C, то Вы не можете использовать функцию членства класса, не используя что-то как boost::bind. Библиотеки Most C, которые берут функцию обратного вызова обычно также, позволяют Вам передавать дополнительный аргумент своего выбора (обычно типа void*), который можно использовать для начальной загрузки класса, как так:


class C
{
public:
  int Method1(void) { return 3; }
  int Method2(void) { return x; }

  int x;
};

// This structure will hold a thunk to
struct CCallback
{
  C *obj;  // Instance to callback on
  int (C::*callback)(void);  // Class callback method, taking no arguments and returning int
};

int CBootstrapper(CCallback *pThunk)
{
  // Call the thunk
  return ((pThunk->obj) ->* (pThunk->callback))( /* args go here */ );
}

void DoIt(C *obj, int (C::*callback)(void))
{
  // foobar() is some C library function that takes a function which takes no arguments and returns int, and it also takes a void*, and we can't change it
  struct CCallback thunk = {obj, callback};
  foobar(&CBootstrapper, &thunk);
}

int main(void)
{
  C c;
  DoIt(&c, &C::Method1);  // Essentially calls foobar() with a callback of C::Method1 on c
  DoIt(&c, &C::Method2);  // Ditto for C::Method2
}
220
задан switz 24 February 2012 в 16:01
поделиться

1 ответ

Перезаписывать содержание одного файла в другой файл. используйте кошку, например,

echo  "this is foo" > foobar.txt
cat foobar.txt

echo "this is bar" > bar.txt
cat bar.txt

Теперь для перезаписи foobar, мы можем использовать команду кошки как ниже

cat bar.txt >> foobar.txt
cat foobar.txt

enter image description here

0
ответ дан 23 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: