2016-03-16 1 views
0

Я попытался создать функцию, которая получает указатель на функции двоичного файла, пишет и читает. Обе функции необходимо получить:Указатель cpp для записи функции в двоичном файле

1) символ * (на функцию записи полукокс * означает, от ведьм адреса записи, и на функции полукокса чтения * означают, чтобы ведьма адрес чтения)

2) Int (на напишите адрес, в котором указано, сколько wirte и функция read, которые означают, сколько читаемых).

Я хочу создать функцию, которая получает указатель для чтения/записи, но я получаю сообщение об ошибке мой код.

#include <iostream> 
using namespace std; 
#include <fstream> 

void func(void(*funcToCall)(char*, int)) 
{ 
    char * temp= "zzz"; 
    funcToCall(temp, 3); 
} 
int main() 
{ 
    fstream dskfl; 
    dskfl.open("aa.txt", ios::out | ios::binary); 
    dskfl.close(); 
    dskfl.open("aa.txt", ios::out | ios::in | ios::binary); 

    char ddd[]= "fffff"; 
    dskfl.write((char*)ddd, 5); 
    dskfl.seekp(0); 

    func(dskfl.write); 
    dskfl.close(); 
} 

я получаю ошибку на линии

func(dskfl.write); 

Error 1 error C3867: 'std::basic_ostream<char,std::char_traits<char>>::write': function call missing argument list; use '&std::basic_ostream<char,std::char_traits<char>>::write' to create a pointer to member 

почему пожалуйста?

+0

Вам нужно две части информации, чтобы вызвать метод класса - instan ce класса и метод вызова. 'fstream * instance = &dskfl;' и 'void (fstream :: * method) (char *, int) = & fstream :: write;' и затем использовать '(instance -> * method) (char *, int)' для вызова метод. – Vishal

+0

@Vishal я изменено на " пустот FUNC (fstream * экземпляр, недействительным (fstream :: * метод) (символ *, Int))" и вызова функции как \t FUNC (& dskfl, & (fstream :: написать)); я получаю ошибку IntelliSense: аргумент типа «СТД :: basic_ostream <полукокса, STD :: char_traits > и (станд :: basic_ostream <полукокса, СТД :: char_traits > :: *) (сопзЬ char * _Str, std :: streamsize _Count) "несовместим с параметром типа" void (std :: basic_fstream > :: *) (char *, int) " – jordan

ответ

0

вы можете использовать lambda

, например:

изменения подписи вашего внешнего FUNC для получения std::function:

void func(std::function<void(char*, int)>&& funcToCall) 

и назвать его так:

func([&dskfl](char* c, int i){ dskfl.write(c, i); }); 
Смежные вопросы