2017-01-04 12 views
1

Следующего кодаконстантный указатель в качестве параметра станда :: привязки

#include <functional> 
#include <iostream> 

using namespace std; 

struct TestStruct { 
    int c; 
}; 

int f(int a, int b, const TestStruct **t) { return a + b + (*t)->c; } 

void main() { 

    TestStruct *t; 
    bind(&f, 1, 2, &t)(); 
} 

сообщает об этой ошибке

error C2893: Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)' 
note: With the following template arguments: 
note: '_Callable=int (__cdecl *&)(int,int,const TestStruct **)' 
note: '_Types={int &, int &, TestStruct **&}' 

кажется, что проблема является константностью в const TestStruct** паров. Однако нет проблем ни с const TestStruct *, ни с TestStruct**. Зачем ?

+1

Вы намеревались написать 'TestStruct ** const'? –

+0

@LightnessRacesinOrbit No. Я упрощен, функция 'f' является внешней функцией' C', с которой я хочу привязываться, и ее подпись такая. – perencia

+3

Вы не можете. http://stackoverflow.com/q/2220916/560648 –

ответ

4

Ваша проблема не связана с самообучением boost, а от простого факта, что литье T** в T const** является незаконным.

см. http://c-faq.com/ansi/constmismatch.html для объяснения почему.

 Смежные вопросы

  • Нет связанных вопросов^_^