const指针作为std :: bind参数

时间:2017-01-04 14:36:57

标签: c++ stdbind

以下代码

#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** param的常量。但是,const TestStruct *TestStruct**都没有问题。为什么?

1 个答案:

答案 0 :(得分:4)

你的问题不是来自boost绑定本身,而是来自于将T**转换为T const**非法的简单事实。

请参阅http://c-faq.com/ansi/constmismatch.html了解原因。